Chciałbym funkcje w C++ uruchomić w Delphi
Kompilator mingw-w64-i686-gcc
Po stronie C++
#pragma pack(push)
#pragma pack(1)
.....
int PWD_2a_(....)
.....
// H-file
#ifdef __cplusplus
extern "C" {
#endif
int PWD_2a(PWD_2a_params *pwd_2a_params);
#ifdef __cplusplus
}
#endif
#pragma pack(pop)
// CPP-file
int PWD_2a(PWD_2a_params *pwd_2a_params)
{
return PWD_2a_( pwd_2a_params.field1, pwd_2a_params.field2 );
}
PWD_2a_params = packed record
struct1 field1;
struct2 field2;
...
end;
Tproc_PWD_2a = function(var params: PWD_2a_params): Integer; cdecl;
proc_PWD_2a: Tproc_PWD_2a;
proc_PWD_2a := GetProcAddress(dll_Handle_PWD_2a, 'PWD_2a');
I z nieznanych powodów Delphi "czasami" nie potrafi uruchomić takiej funkcji:
napisałem "czasami" bo
int PWD_2a(PWD_2a_params *pwd_2a_params)
{
printf("%d", pwd_2a_params.fielld1.pole1 );
return PWD_2a_( pwd_2a_params.field1, pwd_2a_params.field2 );
}
tak się NIE uruchamia po stronie Delphi (CALL NULL)
a taki kod c++ skompilowany d0 DLL dziala poprawnie
int PWD_2a(PWD_2a_params *pwd_2a_params)
{
// printf("%d", pwd_2a_params.fielld1.pole1 );
return PWD_2a_( pwd_2a_params.field1, pwd_2a_params.field2 );
}
po stronie C++ i Delphi struktura ma taki sam rozmiar 144B
DLL w aplikacji C++ dziala zawsze poprawnie !