Здравствуйте. У меня следующая проблема:
написал DLL на С++ и подключил динамически к проекту на Дельфе.
Из длл экспортируется всего одна функция, в которую передаются указатель на структуру (вернее на некий элемент списка) и три целочисленных параметра. Решил опробовать что из этого вышло: для начала сделал так Sort(nil, -1,-1,-1), функция при этом должна была бы просто завершится ничего не возвращая (функция типа void, соответственно в Дельфе описана как процедура). Что я получил? что-то по адресу такому-то не может записать что-то по адресу такому-то. Ну ладно, создал реальный элемент структуры и отправил указатель на него в функцию и решил посмотреть из MVS, что же там творится. И был искренне удивлен, когда вместо необходимого мне адреса я увидел какой-то совершенно левый, а поля целочисленного типа принимали значения от 0 до 3000000 (вместо положенных -1). Ну и есстественно, что когда я решил просмотреть, что хранится по этому адресу по полям моей структуры я увидел:"expression cannot be evaluated"
Структура описана в Дельфи, как
PNomer=^Nomer;
Nomer = record
klas: real;
KolKom: integer;
Ploshad: real;
Etazh: integer;
Stoimost: real;
DataVezd: TDate;
Svobod: bool;
Next: PNomer;
Prev: PNomer;
end;
соответствие в моей длл:
struct Nomer{
double klas;
int KolKom;
double Ploshad;
int Etazh;
double Stoimost;
double DataVezd;
bool Svobod;
Nomer* Next;
Nomer* prev;
};
Описание функции в Дельфи и ее вызов:
TSort = procedure (var first: PNomer; pole1, pole2, pole3:integer); stdcall;
...
...
...
Handles:=LoadLibrary('DL.dll');
if handles<>0 then
begin
@Sort := GetProcAddress(Handles, '_Sort@16');
if(@Sort=nil) then
begin
ShowMessage('Not Found');
exit;
end;
Sort(first,-1,-1,-1);
FreeLibrary(Handles);
ее же описание в длл:
extern "C" __declspec(dllexport) void __stdcall Sort(Nomer* first, int pole1,int pole2,int pole3)
в чем проблема? чего я чайник не понимаю?