用VC写的DLL如何通过delphi调用啊???(6分)

  • 主题发起人 主题发起人 zhanghui6868
  • 开始时间 开始时间
Z

zhanghui6868

Unregistered / Unconfirmed
GUEST, unregistred user!
请教个DLL方面的问题
客户端汇总程序需要使用GatherClient.dll。
其中通过函数GatherClient发送数据,其原型为int GatherClient(char* GatherFile, char* strGatherReceiverIP, int iGatherReceiverPort)
三个参数分别为汇总的文件名、发送的目标IP地址和发送目标的端口。
举例:result=GatherClient("20060620173000","127.0.0.1","19275");
vc d原来调用如下:
if (hZLib = LoadLibrary("GatherClient.dll"))
{
int (_cdecl *GatherClient)(char* File, char* IP, int Port);
if ((FARPROC&)GatherClient = GetProcAddress(hZLib, "GatherClient"))
errcode = GatherClient(FileName, IP, 19275);
}
我用delphi写的调用如下:
function GatherClient(GatherFile:pchar;strGatherReceiverIP:pchar;iGatherReceiverPort:integer):integer;stdcall external 'GatherClient.dll';//隐式调用Dll函数
GatherClient('GASS060719102338.txt','127.0.0.1',19275);
上面的一个是声明,一个是调用 ;
运行时系统提示:access violation at adress6bc8bc2 in module mfc42.dll
是什么问题啊?希望大家帮助。
谢谢。
 
你这样定义试试。
function GatherClient(GatherFile:pchar;strGatherReceiverIP:pchar;iGatherReceiverPort:integer):integer;cdecl external 'GatherClient.dll';//隐式调用Dll函数
 
不行,提示一样啊。[:(]
 
很简单,因为VC写的导出函数做了名字粉碎(如果没有加上extern "C"导出的话)。所以你必须找一个工具查看DLL中到底导出的文件名是什么,才可以。另外象楼上说的要看VC写的时候使用了什么调用规约。再就是加上序号调用,但是不推荐。
 
后退
顶部