Форум: "Прочее";
Текущий архив: 2013.09.15;
Скачать: [xml.tar.bz2];
ВнизПроблема с функцией Delphi -> C++ Найти похожие ветки
← →
Sammi (2013-03-27 17:34) [0]Есть функция:
Function TextOut(Font:integer; x,y:integer; r,g,b,a:single; Text:PChar):TVector2i; cdecl;
begin
Result:=TextOut(Font,x,y,Text,Vector4f(r,g,b,a));
end;
TVector2i = record
x,y:integer;
end;
Пытаюсь использовать ее на С++:typedef vec2i (__cdecl *PTEXTOUTPROC) (int Font, int x, int y, float r, float g, float b, float a, const char* Text);
struct vec2i{
int x;
int y;
};
При попытке записи в Result ловлю исключение.
Если сделать так:
struct vec2i{
int x;
int y,t;
};
то все ок.
Не пойму, где косячу.
← →
icWasya © (2013-03-27 17:41) [1]Ну для начала посмотреть, какого на самом деле размера структуры - на C и в Delphi.
← →
Sammi (2013-03-27 17:42) [2]Обе 8 байт. Первым делом проверил.
← →
Григорьев Антон © (2013-03-28 12:29) [3]Надо смотреть спецификацию, как функция возвращает параметры типа структур. В Delphi такая функция трактуется как процедура с дополнительным параметром-переменной, а при вызове компилятор подставляет туда в качестве параметра либо подходящую переменную, либо создаёт неявную переменную специально для такого вызова. Не знаю, как это реализовано в C++, но почему-то мне кажется, что как-то по-другому должно быть. Надо копать в этом направлении.
← →
SergeyIT © (2013-03-29 13:58) [4]А что это за функция вызывается?
Result:=TextOut(Font,x,y,Text,Vector4f(r,g,b,a));
← →
Sammi (2013-04-08 14:01) [5]Собственно функция, которая выводит текст.
Если вас одинаковое название смущает, то не обращайте внимание. Оно в реале разное. У внешних функций префиксы. Убрал их чтобы не засорять код.
← →
DevilDevil © (2013-04-08 20:51) [6]> Sammi (27.03.13 17:34)
есть возможность посмотреть дизасм вызова со стороны С++ ?
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.09.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.002 c