dll中 如 何 传 递 字 符 串 类 型 的 参 数 ( 积分: 50 )

  • 主题发起人 主题发起人 南柯一梦
  • 开始时间 开始时间

南柯一梦

Unregistered / Unconfirmed
GUEST, unregistred user!
dll中 如 何 传 递 字 符 串 类 型 的 参 数 ? 能 给 个 例 子 吗 ?



最 好 把 字 符 串 参 数 定 义 为 PChar型 , 因 为 这 样 可 以 方 便 其 他 语 言 调 用 。

如 :


function MyStringFunc(s:PChar)integer;stdcall;


begin


...


end;


在 Delphi中 可 以 这 样 调 用 :


var myString:string;


...


c := MyStringFunc(PChar(s));


在 VB中 可 以 声 明 为 :


Declare Function MyStringFunc Lib "my.dll" (ByVal s As String) As Long


在 VC中 可 以 定 义 为 :


int APIENTRY MyStringFunc(LPSTR s);
 
lz s hxr, jdwb
 
先附上我的代码、
procedure TestPChar(TempChar: pchar);stdcall;
var
Data : array of Char;
I: Integer;
begin
SetLength(Data, 28);
for I := 0 to 27 do
Data := 'A';
Data[27] := #0;
copyMemory(TempChar,Data, 28);

end;
在delphi里调用正常,在VB下调用,VB崩溃!
附VB声明及调用代码
Private Declare Sub TestPChar Lib "Test" (ByRef tempstr As String)
调用
Call TestPChar(macaddr)
MsgBox macaddr
 
vb的string跟delphi的不一样。
 
之所以不一样我才用PHCAR的,查了好多资料,不知道哪儿的问是,我想VB声明调用都没有误!
 
你的 vb 没声明 stdcall 吧?
 
不是那问题,呵呵,你没用过VB,它声明和DELPHI不一样的,除非我的DLL没有stdcall,但我确实用了,希望搞过的朋友关注一下啊
 
终于搞定了,还是VB声明的问题,把解决方法搞出来,以便遇到和我一样的朋友借鉴
附:
Private Declare Sub TestPChar Lib "Test" (ByRef tempstr As Any)
调用
Dim teststr As String
Dim i As Integer
Dim macaddr(27) As Byte
Call TestPChar(macaddr(0))
For i = 0 To 27
teststr = teststr + Chr(macaddr(i))
Next i
MsgBox teststr
 
VB 从来不用,除了慢和不能内嵌 asm 和不能直接访问之外,没发现什么优点。
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部