我用C写的几个函数,其定义如下:
DLLIMPORT void setMyPCName(char *c_name)
{
strcpy(pcName, c_name);
}DLLIMPORT void setMyPCFileList(char **p)
{
pPathList=p;
}DLLIMPORT void stopMyPC( )
{
TerminateThread(hControlThread , 0) ;
TerminateThread(hDataThread , 0);
TerminateThread(hBrdcstThread , 0);
}
DLLIMPORT int startMyPC( )
{}这是那个几个函数的定义
那么要怎么样调用呢??
我用delphi调用时,
p:string
p := 'ok'
setMyPCName(@p)
会出现乱码,请问是怎么回事(注:setMyPCName是绝对可靠的,用别的工具测过很多次的)
是不是调用方式的问题比如cdecl stdcall fastcall (注:我的dll是有控制台编译的)
我现在很急,程序明天就要发到美国去的,在线等,希望哪位高人看到了,并且知道帮忙解决一下,
也可以留下QQ之类,有什么问题我再来请教,感激中!!!谢谢了!!!!!!
DLLIMPORT void setMyPCName(char *c_name)
{
strcpy(pcName, c_name);
}DLLIMPORT void setMyPCFileList(char **p)
{
pPathList=p;
}DLLIMPORT void stopMyPC( )
{
TerminateThread(hControlThread , 0) ;
TerminateThread(hDataThread , 0);
TerminateThread(hBrdcstThread , 0);
}
DLLIMPORT int startMyPC( )
{}这是那个几个函数的定义
那么要怎么样调用呢??
我用delphi调用时,
p:string
p := 'ok'
setMyPCName(@p)
会出现乱码,请问是怎么回事(注:setMyPCName是绝对可靠的,用别的工具测过很多次的)
是不是调用方式的问题比如cdecl stdcall fastcall (注:我的dll是有控制台编译的)
我现在很急,程序明天就要发到美国去的,在线等,希望哪位高人看到了,并且知道帮忙解决一下,
也可以留下QQ之类,有什么问题我再来请教,感激中!!!谢谢了!!!!!!
begin
p:='ok';
setMyPCName(p);
end;
另外,大哥DLLIMPORT 不是导出,是导入,你怎么保证以前对的啊?
DLLEXPORT????把这两个宏的定义看一看吧
一般C/C++调用参数堆栈约定是, cdecl
你DELPHI对应函数声明是需要加cdecl修饰词
我是这样定义的:
#define DLLIMPORT __declspec (dllexport)
还有没有别的错误的可能呢?
所以你应该采用cdecl调用方式
怎么调用 呢?
在DELPHI里怎么声明??
我是这样的
TsetMyPCFileList = procedure(AFileList: pointer);cdecl;
setMyPCFileList : TsetMyPCFileList ;
@setMyPCFileList := GetProcAddress(DLLHandle, 'setMyPCFileList');
MyPCFileList: PChar;
MyPCFileList := 'C:\NoFileList'#0#0;(因为是二维指针所以我以#0#0结束循环,dll中的函数是以**p == 0 结束的 )
setMyPCFileList(@MyPCFileList);这样会有什么问题吗???
我的程序一运行就会死掉,我觉得是我的循环没有结束所致,各位有什么意见呢?
if dllhandle<> then
@setMyPCFileList := GetProcAddress(DLLHandle, 'setMyPCFileList');MyPCFileList: PChar;
MyPCFileList := 'C:\NoFileList';
setMyPCFileList(@MyPCFileList);在delphi下是没有问题的如果还有问题那你可以试着跟踪一下动态库吧
dllhandle是正常的因为我还有别的函数能正常运行,
哪位知道是什么原因吗?
怎样跟踪动态库?