请问delphi调用c写的dll问题:(100分)

  • 主题发起人 主题发起人 alpfeng
  • 开始时间 开始时间
A

alpfeng

Unregistered / Unconfirmed
GUEST, unregistred user!
其中C转换为delphi的函数定义为:
type
P_portDscr_=^_portDscr_;
_portDscr_=record
Index:Integer

OperStatus:integer

InOctets:DWord

InPkts:DWord;
OutOctets:DWord;
OutPkts:DWord

pri:P_portDscr_

next:P_portDscr_

end;
DATA=_portDscr_;

P_FLUXData_=^_FLUXData_;
_FLUXData_=record
lpDATA:DATA;
end;
RETURNFLUX=_FLUXData_;

function getPortDecr(strIp:pchar;strPwd:pchar):RETURNFLUX
stdcall;

implementation
function getPortDecr;external 'SnmpFlux.DLL' name 'getPortDecr';

现在要在delphi中调用该函数,我的类型定义如下:
type
Point =^structDATA;
structDATA = Record
Index: integer;
OperStatus: integer;
InOctets :dword;
InPkts :dword;
OutOctets :dword;
OutPkts :dword;
Pri: Point;
Next: Point;
end;

returnPoint=^structRETURNFLUX;
structRETURNFLUX = Record
lpDATA: Point;
end;
................

procedure TForm1.Button1Click(Sender: TObject);
var
ip,pwd:string;
a : array [1..20] of Char;
b : array [1..20] of Char;
i,j:integer;
strip:pchar;
strpwd:pchar;
index:integer;
OperStatus:integer;
StartPos:Point;
ReturnPos:returnPoint;
begin
............//调用dll函数,取出结构体中定义的各项值:
end;

请问上面的函数调用应该怎么写。急求啊,100分奉上:
 
难道没人知道吗?
 
ReturnPos:=getPortDecr(strIp,strPwd):

不行?
 
那怎么样取出record中的每一项呢?
 
好像不行,说什么pointer type required
 
有没有人能够告诉我啊
 
哦,知道了。
你要new一下。
new(StartPos);
ReturnPos.lpDATA:=StartPos;
ReturnPos:=getPortDecr(strIp,strPwd):



 
还是不行啊,报错:
[Error] main.pas(81): Incompatible types: 'structRETURNFLUX' and '_FLUXData_'
 
能不能直接跟我联系啊,谢谢!!
qq:6690216
或:email:alpfeng@163.com
 
定义错了吧?
_FLUXData_=record
lpDATA:DATA;
end;
这里DATA类型可不是P_portDscr而是_portDscr_
而你的定义是
structRETURNFLUX = Record
lpDATA: Point
[red] ????[/red]
end;
 
那位大侠能帮忙啊,q我:6690216
不甚感激!!
 
还没搞懂,不过分还是送出去了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
905
import
I
I
回复
0
查看
583
import
I
后退
顶部