Delphi中调用标准C动态链接库的问题

linvoc 2002-03-29 07:46:22
我用标准C写了一个动态链接库,只有一个函数
char* GetString(int n , char buf[])
so文件可以编译生成, 接下来我想在 delphi中调用这个函数,看了help后,我是这样写的
function GetString(n:integer ; buf :pchar):pchar ;stdcall; external '/mypath/test.so';
在程序的处理中,我这样调用
var
pResult : pChar ;
begin
pResult = GetString( 5 , 'aaaa')
end;
然后程序会出错,请问我应该怎么写函数声明及处理呢?
另外 我还需要在函数体中返回字符串以及整型数的情况,以前在VC下很好处理,现在在LINUX下不知道该怎么做了。
...全文
27 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
linvoc 2002-03-30
  • 打赏
  • 举报
回复
我改用cdecl了,但是没有用啊,仍然会出错,现在关键的问题就是在于传出与返回字符串有问题,其他例如传入字符串进行处理,以及返回整型数等都没有问题了,字符串的问题非常麻烦。
在标准C的函数定义里,char buf[]好呢,还是char* buf好。我觉得好象有点不同。
我的DLL中调用成功的函数例子是
int printUPPERCASE(char inLine[])
然后我在DELPHI中这样声明
function printUPPERCASE(inLine : pChar) : integer ; external "/mypath/test.so"
这个函数调用可以成功,我可以正确地传入字符串,并且返回整型数。就是字符串返回与传出没有办法。
希望高手能够鼎力相助
linvoc 2002-03-30
  • 打赏
  • 举报
回复
是这样的,这个用标准C写的DLL其实运行在LINUX下,我不知道在LINUX编译环境中能不能使用STDCALL,当然我会试试看的。我想知道的是,如果我用VC写标准C的动态链接库,如果写成
char* GetString(int n , char buf[])
或者另外一个
int GetValue(int n , char buf[]) //buf是传出的,这在DELPHI中又要怎么定义 呢,
是不是写成
function GetString(n:integer ; buf :pchar):pchar ;cdecl; external '/mypath/test.so';
就可以了呢?
xzgyb 2002-03-30
  • 打赏
  • 举报
回复
c的调用约定好象默认是cdecl
prometheusphinx 2002-03-30
  • 打赏
  • 举报
回复
你在C中是不是stdcall啊?如果不是的话在Delphi中要用cdecl.
linvoc 2002-03-30
  • 打赏
  • 举报
回复
有人会吗?
linvoc 2002-03-29
  • 打赏
  • 举报
回复
上面写得有点问题,其实就是把so换成dll。另外我还需要在LINUX下的KYLIX中进行相应的工作,因此请哪位如果懂的话,指教一二吧。
谢谢!!!

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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