Quote:
J'en conclus que j'ai un problème de compatibilité de mes variables/paramètres.
Je n'ai pas regardé le code en détail faute de temps mais il me semble que la conclusion n'est pas bonne du moins pas entièrement.
En ce qui concerne la compatibilité de type:
D'abord il faudrait être sûr que cdecl est ce qu'il faut. Une librairie C++entièrement compilée en stdcall ça s'est déjà vu.
Mais admettons que ça soit ok.
Quote:
DWORD en C++ donc un LongInt chez Delphi. Jusque-là pas de soucis particulier.
Si...
Un LongInt Delphi est un 32 bits signé tandis d'un DWORD Windows est un 32 bits non signé.
Il faut mettre un LongWord Delphi.
Quote:
Par contre, pour la chaîne de caractère, il me semble que je peux affecter un PChar à une string sans problème.
Là non, jamais.
Un PChar c'est comme un char* en C c'est à dire un pointeur sur une chaîne avec zéro terminal. Tandis qu'une string en Pascal c'est un tableau dont le premier élément est la longueur de la chaîne et les éléments suivants la chaîne elle même (dont la longueur est limitée à 255 donc). Et là il n'y a pas de zéro terminal. Les deux types ne sont pas compatibles. Il faudrait construire une AnsiString à partir du PChar.
Maintenant je flaire qu'il y a un autre problème. Rien ne dit (plaisanterie classique du C) que le pointeur char* alias PChar est toujours valable au moment de son utilisation dans Delphi, ainsi que le message d'erreur peut le laisser penser, et si le problème n'apparaît pas déjà à cause de l'incompatibilité entre les types chaînes. Raison de plus pour recopier les caractères pointés et non affecter le pointeur dans un type Delphi.
Voilà, en espérant t'avoir dépanné un peu :)
Je n'ai pas regardé le code en détail faute de temps mais il me semble que la conclusion n'est pas bonne du moins pas entièrement.
En ce qui concerne la compatibilité de type:
D'abord il faudrait être sûr que cdecl est ce qu'il faut. Une librairie C++entièrement compilée en stdcall ça s'est déjà vu.
Mais admettons que ça soit ok.
Si...
Un LongInt Delphi est un 32 bits signé tandis d'un DWORD Windows est un 32 bits non signé.
Il faut mettre un LongWord Delphi.
Là non, jamais.
Un PChar c'est comme un char* en C c'est à dire un pointeur sur une chaîne avec zéro terminal. Tandis qu'une string en Pascal c'est un tableau dont le premier élément est la longueur de la chaîne et les éléments suivants la chaîne elle même (dont la longueur est limitée à 255 donc). Et là il n'y a pas de zéro terminal. Les deux types ne sont pas compatibles. Il faudrait construire une AnsiString à partir du PChar.
Maintenant je flaire qu'il y a un autre problème. Rien ne dit (plaisanterie classique du C) que le pointeur char* alias PChar est toujours valable au moment de son utilisation dans Delphi, ainsi que le message d'erreur peut le laisser penser, et si le problème n'apparaît pas déjà à cause de l'incompatibilité entre les types chaînes. Raison de plus pour recopier les caractères pointés et non affecter le pointeur dans un type Delphi.
Voilà, en espérant t'avoir dépanné un peu :)