J'ai une classe abstraite dans un programme C++ qui ressembleCrash lors de C++ appelle programme DLL Delphi fonctionne
class Interface {
virtual void blah() = 0;
virtual int asdf() = 0;
};
et ce programme C++ vous permet de charger les DLL avec LoadLibrary. Lorsque vous chargez une DLL, elle appelle une fonction dans la DLL appelée Setup avec GetProcAddress, en passant un pointeur sur une sous-classe d'Interface en tant que paramètre.
J'ai un DLL Delphi qui imite la classe et expose la fonction de configuration comme ceci:
type
Interface = class abstract
procedure blah(); virtual; abstract;
function asdf() : Integer; virtual; abstract;
end;
function Setup(I : Interface) : Integer; export; cdecl;
begin
Result := 0;
end
exports Setup;
Mais lorsque le programme appelle la fonction, il se bloque. Si je change la fonction d'installation à ceci:
function Setup(I : Pointer) : Integer; export; cdecl;
Il fonctionne très bien et ne tombe pas en panne, mais bien sûr, je ne peux pas le laisser comme ça, je dois être en mesure d'utiliser la classe. Quelqu'un peut-il me dire ce que je fais mal?
Je ne sais pas comment résoudre votre problème car je n'utilise pas (et ne m'inquiète pas?) Beaucoup d'appeler des conventions. Mais j'allais dire qu'il semble que vous êtes sur la bonne voie avec la modification de votre convention d'appel. Vous pourriez vouloir le changer pour votre interface C++. –
Je n'ai pas de contrôle sur le code C++, juste le delphi. –
Vous n'avez absolument aucun contrôle sur le code C++? Vous ne pouvez même pas se plaindre aux développeurs C++ qu'ils ont foiré, et ensuite exiger qu'ils le réparent? Ce n'est pas bon. –