J'ai des problèmes d'envoi en utilisant une procédure Dll avec des paramètres, je ne suis pas autorisé à ajouter des paramètres à l'appel de la méthode dll dans mon projet de test.Comment appeler la procédure DLL avec des paramètres?
Im essayant d'appeler cette méthode dll:
procedure Transfer(sMessage: PChar); stdcall;
begin
MainForm.ShowThis(sMessage);
end;
exports
Transfer;
TestProj utilisant ceci:
procedure TForm1.Button1Click(Sender: TObject);
var
DLLHandle : THandle;
begin
DLLHandle := LoadLibrary ('C:\Program Files\Borland\Delphi5\Projects\Dll\MyLink.dll');
if DLLHandle >= 32 then
try
@Trans := GetProcAddress (DLLHandle, 'Transfer');
if @Trans <> nil then
Trans //Would like to say something like: Trans('Hello')
else
Showmessage('Could not load method address');
finally
FreeLibrary(DLLHandle);
end
else
Showmessage('Could not load the dll');
end;
L'erreur de compilation que je reçois si j'utilise le "Trans ('Bonjour')" est: [Erreur] Unit1.pas (51): Trop de paramètres réels.
Je suis autorisé à l'exécuter sans les paramètres, mais je ne reçois jiberish dans ma boîte showmessage et un crash après, car je n'envoie aucun message. Donc, la question est comment puis-je envoyer une chaîne en tant que paramètre dans la DLL? Qu'est-ce que je fais mal ?
Merci, il a travaillé allmost la façon dont vous Sayd. First of Transfer est une procédure donc il ne devrait pas retourner une chaîne donc: TTransferPtr = procedure (sMessage: PChar); stdcall. Et pour que Trans <> nil fonctionne, il doit être une adresse de pointeur: si @Trans <> nil. Mais autre alors que c'est juste. Merci encore – Roise
Ah, désolé pour les erreurs, je devrais d'abord testé avant de poster. –
Si la DLL est écrite en pré-D2009, l'application doit utiliser 'PAnsiChar' au lieu de' PChar' pour assurer la compatibilité si l'application est écrite/mise à niveau vers D2009 +. –