delphi中调用C写的dll的参数问题

gongluyang 2004-12-30 11:45:15
我用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之类,有什么问题我再来请教,感激中!!!

谢谢了!!!!!!
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongluyang 2004-12-31
  • 打赏
  • 举报
回复
不能这样的;要是这样的话,DLL函数的循环就不会结束,DLL中是以**p == 0 结束循环的
dllhandle是正常的因为我还有别的函数能正常运行,
哪位知道是什么原因吗?
怎样跟踪动态库?
zl54 2004-12-31
  • 打赏
  • 举报
回复
你先看看Dllhandle 是不是等于0
if dllhandle<> then
@setMyPCFileList := GetProcAddress(DLLHandle, 'setMyPCFileList');

MyPCFileList: PChar;
MyPCFileList := 'C:\NoFileList';
setMyPCFileList(@MyPCFileList);

在delphi下是没有问题的

如果还有问题那你可以试着跟踪一下动态库吧
gongluyang 2004-12-31
  • 打赏
  • 举报
回复
那请问我调用setFileList(char **p)
怎么调用 呢?
在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);

这样会有什么问题吗???
我的程序一运行就会死掉,我觉得是我的循环没有结束所致,各位有什么意见呢?
zl54 2004-12-31
  • 打赏
  • 举报
回复
VC++默认调用方式为cdecl
所以你应该采用cdecl调用方式
gongluyang 2004-12-31
  • 打赏
  • 举报
回复
宏定义没错,是笔误
我是这样定义的:
#define DLLIMPORT __declspec (dllexport)
还有没有别的错误的可能呢?
beyondtkl 2004-12-31
  • 打赏
  • 举报
回复
看样子 DLLIMPORT 这个宏不太对 应该是export之类的 才能做为导出函数。。。。
halfdream 2004-12-31
  • 打赏
  • 举报
回复
楼主。。DLLIMPORT????
DLLEXPORT????

把这两个宏的定义看一看吧。。。


一般C/C++调用参数堆栈约定是, cdecl
你DELPHI对应函数声明是需要加cdecl修饰词
zl54 2004-12-31
  • 打赏
  • 举报
回复
var p:pchar
begin
p:='ok';
setMyPCName(p);

end;
另外,大哥DLLIMPORT 不是导出,是导入,你怎么保证以前对的啊?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧