Delphi怎么调用VC写的DLL呀?LPSTR * 类型 ( 积分: 200 )

  • 主题发起人 主题发起人 breezily
  • 开始时间 开始时间
B

breezily

Unregistered / Unconfirmed
GUEST, unregistred user!
extern &quot;C&quot; LPSTR __declspec(dllexport) __stdcall test(LPSTR *lpstrArray,int leng)<br>怎么用呀?<br>function &nbsp;test(lpstrArray:PLPSTR;leng:Integer):PChar ;stdcall ;far;<br> &nbsp;external 'dll.dll' name 'test';<br>var<br> aarr:array[0..4] of PANSIChar;<br> P:PLPSTR ;<br> arrr:array[0..4] of array[0..1] of Char ;<br> ret:PChar ;<br>begin<br> &nbsp;arrr[0]:='11';<br> &nbsp;arrr[1]:='12';<br> &nbsp;arrr[2]:='13';<br> &nbsp;arrr[3]:='14';<br> &nbsp;arrr[4]:='15';<br> &nbsp;aarr[0]:=@arrr[0];<br> &nbsp;aarr[1]:=@arrr[1];<br> &nbsp;aarr[2]:=@arrr[2];<br> &nbsp;aarr[3]:=@arrr[3];<br> &nbsp;aarr[4]:=@arrr[4];<br> &nbsp;ret:=StrAlloc(255);<br> &nbsp;p:=@aarr[0];<br> &nbsp;ret:=test(p,4);<br>end;<br>调用出问题?异常!
 
extern &quot;C&quot; LPSTR __declspec(dllexport) __stdcall test(LPSTR *lpstrArray,int leng)<br>怎么用呀?<br>function &nbsp;test(lpstrArray:PLPSTR;leng:Integer):PChar ;stdcall ;far;<br> &nbsp;external 'dll.dll' name 'test';<br>var<br> aarr:array[0..4] of PANSIChar;<br> P:PLPSTR ;<br> arrr:array[0..4] of array[0..1] of Char ;<br> ret:PChar ;<br>begin<br> &nbsp;arrr[0]:='11';<br> &nbsp;arrr[1]:='12';<br> &nbsp;arrr[2]:='13';<br> &nbsp;arrr[3]:='14';<br> &nbsp;arrr[4]:='15';<br> &nbsp;aarr[0]:=@arrr[0];<br> &nbsp;aarr[1]:=@arrr[1];<br> &nbsp;aarr[2]:=@arrr[2];<br> &nbsp;aarr[3]:=@arrr[3];<br> &nbsp;aarr[4]:=@arrr[4];<br> &nbsp;ret:=StrAlloc(255);<br> &nbsp;p:=@aarr[0];<br> &nbsp;ret:=test(p,4);<br>end;<br>调用出问题?异常!
 
//extern &quot;C&quot; LPSTR __declspec(dllexport) __stdcall test(LPSTR *lpstrArray,int leng)<br>导出的函数名称应该是 _test .你可以使用一些PE工具确认一下
 
与名字无关的,主要是函数参数的类型的问题!<br>External exception E06D7363
 
function &nbsp;test(var lpstrArray:PChar;leng:Integer):PChar ;stdcall ;
 
调用的DLL中有<br>(lpstrArray+i)这样的操作,显然是数组调用的;<br>用test(lpstrArray:array of Pchar;leng:integer);调用没有出异常,但是结果不对!
 
function &nbsp;test(var lpstrArray:PChar;leng:Integer):PChar ;stdcall ;<br>var<br> &nbsp;lpstrArr : Array[0..10] of PChar;<br>begin<br> &nbsp;for .. //赋值<br> &nbsp;test(lpstrArr[0], 11);<br>end;
 
把far去了, stdcall就可以了,赋值的时候传数组首元素
 
原来是他们的DLL的问题, 能正确调用说明已经没有问题了的!
 
后退
顶部