关于 VB 调用 Delphi 编写的 DLL 的问题。(100分)

  • 主题发起人 主题发起人 liyinwei
  • 开始时间 开始时间
L

liyinwei

Unregistered / Unconfirmed
GUEST, unregistred user!
Dll 的实现如下:
library TestDll;

{$R *.res}
procedure Test(var lpOutPut: PChar);stdcall;
begin
lpOutPut := PChar('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
end;

exports
Test;

begin

end.

VB 的实现如下:
Private Declare Sub Test Lib "TestDll" (ByVal lpOutPut As String)

Private Sub Command1_Click()
Dim s As String
Dim i As Integer

s = String(100, 0)
Test (s)
MsgBox (s) ‘这里显示是几个乱码,而不是 A..Z
End Sub

我的目的是 VB 调用该 DLL 的函数的时候,返回一个字符串。
用 Delphi 调用该 DLL 正常返回字符,不知道用 VB 调用的时候哪里错了,还是 DLL 有问题。
我对 VB 不太熟,各位指点一下。
 
Private Declare Sub Test Lib "TestDll" (ByRef lpOutPut As String)
试试
 
不行,VB 调试的时候显示 非法操作错误。
 
自己顶一下,大家帮我看看啊。
 
call Test (s)
 
使用 Call 也是不行的。
 
自己顶一下。
大家帮我看看有什么问题啊。
 
看windows核心编程把
 
function Test(lpOutPut:PCHAR):PCHAR;stdcall;
在模块中写
Public Declare Function Test Lib "TestDll.dll" (ByVal aSource As String) As String
Private Sub Command1_Click()

Text2.Text = Test(Text1.Text)

End Sub
 
不好意思 写成函数了 ,你自己更改下即可
 
还是不行,被传进去的参数的值完全没有改变。
 
library TestDll;

{$R *.res}
procedure Test(var lpOutPut: PChar);stdcall;
begin
lpOutPut := PChar('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
end;
exports
Test;
begin
end.

VB 的实现如下:
Private Declare Sub Test Lib "TestDll" (byref lpOutPut As String)

Private Sub Command1_Click()
Dim s As String
call Test(s)
MsgBox s
End Sub



library TestDll;

{$R *.res}
Function Test():PChar;stdcall;
begin
Result:= PChar('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
end;
exports
Test;
begin
end.

VB 的实现如下:
Private Declare Function Test Lib "TestDll" () As String

Private Sub Command1_Click()
MsgBox Test
End Sub
 
不行,VB 调试的时候显示 非法操作错误。
 
返回的字符类型应该是:WIDESTRING
 
to bbscom:
不是很明白,可以说明白一点吗?
 
多人接受答案了。
 

Similar threads

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