1
我必须使用带有参数的DLL过程发送的问题,即时通讯不允许参数添加到dll的方法在我的测试项目呼叫。如何使用参数调用DLL过程?
我试着去调用这个DLL的方法:使用
procedure Transfer(sMessage: PChar); stdcall;
begin
MainForm.ShowThis(sMessage);
end;
exports
Transfer;
TestProj这样的:
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;
编译错误我得到,如果我用的是 “跨( '你好')” 是: [错误] Unit1.pas(51):太多的实际参数。
进出口允许无参数运行,但然后我只得到jiberish我showmessage框和后崩溃,因为我不发送任何消息。
所以,问题是我如何去发送一个字符串作为参数传入的dll?我究竟做错了什么 ?
由于它的allmost工作你sayd的方式。第一传送是一个过程,以便它不应该返回一个字符串,以便:TTransferPtr =过程(sMessage:PChar类型); STDCALL。如果Trans <>无效,它需要是一个指针地址:if @Trans <> nil。但其他的那是正确的。再次感谢 – Roise 2010-10-01 11:52:08
啊,遗憾的错误,我应该先在发布前进行了测试。 – 2010-10-01 12:18:19
如果DLL被写入预D2009,然后应用程序应使用的'PAnsiChar'代替'PChar'以确保兼容性,如果应用程序被写入/升为D2009 +。 – 2010-10-04 23:44:57