这个c语言的dll如何调用

sgjie 2012-05-27 08:07:22
//读取数据 test.dll
int test(char *buf)
数据结构如下
char c1;
char c2[100];


这个dll如何调用啊。如何声明啊
用了几个方法,要不有的时候一下就退出,要么Dispose的时候提示错误。
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
老吴子 2012-06-19
  • 打赏
  • 举报
回复
我估计是C语言和Delphi在结构对齐上不同所造成的。
sgjie 2012-05-28
  • 打赏
  • 举报
回复
描述是有些混乱。 int test(char *buf)

中的buf是返回的值,是一个结构体指针
{char c1;
char c2[100];
}
这种情况不知如何处理,
我是这样做的,先定义
Ttest=record
c1 :char;
c2 :array[0..99] of char;
end;
ptest:^Ttest;
然后在delphi中声明

function test(buf :ptest):integer;stdcall; external 'test.dll';

我调用的时候:
var ptest1:ptest;

new(ptest1);
test(ptest1);
showmessage(string(ptest1.c2));
这个是可以取值正确的。
问题是
Dispose(ptest1)的时候,或者程序退出的时候都提示
invalid pointer operation。
还有调用test(ptest1)的不稳定,有的时候程序直接退出。所以不知道原因了,是否必须这样声明,还是有其他的办法?
UnkownState 2012-05-28
  • 打赏
  • 举报
回复
c/c++: int test(char *buf)

delphi: function test(buf: PAnsiChar): Integer; cdecl; external 'test.dll';
这样适应d7(ansi)或者xe(unicode),同时c/c++的普通dll导出api未指定函数参数入栈方式时默认为cdecl,而不是stdcall, 否则参数多就会失败,至于指针所指空间的释放最好要清楚是谁的工作。
「已注销」 2012-05-28
  • 打赏
  • 举报
回复
char *buf 就是个字符指针,怎么硬要说成结构体。描述十分混乱。


sgjie 2012-05-28
  • 打赏
  • 举报
回复
谢各位楼上,char *buf是一个结构体 char c1;
char c2[100];

如果是一个字符串,直接就用pchar就可以了,如果buf是一个结构体怎么弄呢?
我是把buf也定义了这个结构体Ttest,但是 不稳定,有的时候调用函数就退出,有的时候不退出可以取值
,但Dispose的时候每次都提示错误什么的。
kaikai_kk 2012-05-28
  • 打赏
  • 举报
回复
打錯了
k:=text(c1); =>k:=test(c1);
kaikai_kk 2012-05-28
  • 打赏
  • 举报
回复
function test(buf :Pchar):integer;stdcall; external 'test.dll';

var
k:integer;
c1:PChar;
begin
c1:=stralloc(1024);
c1:='Hello';
k:=text(c1);
strdispose(c1);
end;
bdmh 2012-05-28
  • 打赏
  • 举报
回复
char c1;
char c2[100];

c1 : char;
c2 : array [0..99] of char
cp1982 2012-05-28
  • 打赏
  • 举报
回复
LZ你自己没搞明白呀,char *buf中的buf只是个形参啊,char *在delpi里面就是pchar
sgjie 2012-05-28
  • 打赏
  • 举报
回复
自己解决了,申请 new(ptest1);
改成getmem(ptest1, SizeOf(ptest));都不行,最后索性 getmem(ptest1, 1024); 结果不提示invalid pointer operation。
错误了。 不知为何?
Oraclers 2012-05-27
  • 打赏
  • 举报
回复
大概是:
function test(buf :Pchar):integer;stdcall; external 'test.dll';

1,183

社区成员

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

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