难道就没有既懂C又懂DELPHI的人吗,还是嫌分少?(100分)

  • 主题发起人 主题发起人 阿土公公
  • 开始时间 开始时间

阿土公公

Unregistered / Unconfirmed
GUEST, unregistred user!
调用dll中c函数的原形如下:
int tpcall(char *svc, char *idata, long ilen, char **odata, long *olen, long flags)
我的声明如下:
function tpcall(SVCNAME, IDATA: PChar; ILEN: LongInt; var ODATA: PChar;var OLEN:
Longint; flags: LongInt): Integer; stdcall;
调用时提示参数不对!

我把声明改为:
type
ptrPchar = ^Pchar;
ptrLong = ^longint;
function tpcall(SVCNAME, IDATA: PChar; ILEN: LongInt; ODATA: ptrPChar; OLEN:
ptrLong; flags: LongInt): Integer; stdcall;
调用时还是说参数不对


 
function tpcall(svc, idata: PChar; ilen: LongInt; var odata: PChar;var olen:
Longint; flags: DWORD): Integer; stdcall;
 
>调用时提示参数不对!

什么地方提示?编译的时候还是运行的时候?
 
C是区分大小写的,而且在DELPHI里面的声明形参名字都不一样,
你把形参名字改为一样,而且大小写要匹配;再试一下。
 
__declspec(dllimport)
函数声明须加入关键字,
 
stdcall去掉试/
 
老弟:

Char * --> var P: String; or P: Pointer;

C 的指针在 Pascal 里面须要变量参数(或数祖)。
 
同意楼上的,C 的指针在 Pascal 里面须要变量参数
你可以自己去看windows.pas或winsock.pas等头文件
还有不知道你是什么时候出错,如果是运行时出错,那就是类型转化有问题,如果编译也不
通过,肯定时声明的时候书写有问题,从dll的代码里又无法看出你入口参数的原型的,即使
转化类型不对Delphi也无从得知,只有用了以后看结果才知道对不对。
 
收藏先[blue][/blue]
 
It's easy:

function tpcall(svc,idata:PChar; ilen:LongInt; odata:PLPStr; olen:PLongint; flags:LongInt): Integer; stdcall; external '动态库.dll' name 'tpcall';

给分!
 

type
dpstr =^ pchar;

function tpcall(svc,idata:PChar; ilen:LongInt; odata:dpstr; olen:PLongint; flags:LongInt): Integer; stdcall; external '动态库.dll' name 'tpcall';

 
"我是帅哥"同志已经说了哟,我还是贴上吧,经过我测试了的
function tpcall(SVCNAME, IDATA: PChar; ILEN: LongInt; var ODATA: PChar;var OLEN:
Longint; flags: LongInt): Integer; cdecl;

implementation

{$R *.DFM}
function tpcall;external 'Cdll.dll' name 'tpcall';
运行正确
 
to "我是刷歌" 和 "qiya":

你们的odata为PChar,行参都不对,调用肯定出错!

你们认为是对的,只是定义和编译通过吧了!!!
 
>>wql
调用也是对的,不过我做测试时我只让函数返回1,没有其它内容,运行结果是对的!
 
谢谢大家。
 
多人接受答案了。
 
后退
顶部