忙了一天,还是没有解决,VB调用delphi做的DLL返回Pchar类型问题(100分)

procedure xxx(var aa : pchar,bsize:integer);
begin
s:='xxxxxxxxxx';
strplcopy(aa,s,bsize);
end;

sub zzz()
dim a as string;
a = space(20)
xxx a,20
text1.text = a
end sub
 
没有调试过,试试看
// dll文件
library Project2;
uses
SysUtils,
Classes;
{$R *.RES}
procedure A(var s1 : pchar);
begin
s1 := 'abc';
end;

exports
A;
begin
end.

//VB调用
Declare Sub A Lib "project2.dll" (ByRef s1 As String)
%如果不行用 Declare Sub A Lib "project2.dll" (ByVal s1 As String)试试
Private Sub CommandButton1_Click()
Dim s As String
s = String(255, vbNullChar)
A(s)
text2.text = s
End Sub
 
//不很规范,但一直在运行
'抄月表码(定时)(dwCTUID--终端号,lpstrRecvData--返回字符型数组,nRecvLen--返回字符个数) lpstrRecvData 要预先分配空间
Public Declare Function RecvMonCode Lib "RecvMeter" (ByVal dwCTUID As Long, lpstrRecvData As Byte, ByRef nRecvLen As Long) As Long
function RecvMonCode(dwCTUID: DWORD;
var lpstrRecvData;
var nRecvLen: integer): integer;
stdcall;
 
结束了。明天再试
 
注意定义,如不加ByVal,参数传递时,不将指向DLL
的指针传递给参数变量本身,
而是将传递参数值的一份拷贝传递给DLL。比如传递字符
串参数时,VB与DLL之间的接口支持两种类型的字符串,
如未使用ByVal关键字,VB将指向DLL的函数指针传递给
一个OLE2.0字符串(即BSTR数据类型),而Windows API函数
往往不支持这种数据类型,导致错误。而使用ByVal关键字
后VB将字符串转变换成C语言格式的“空终止”串
 
呵呵呵,改改你的DLL函数定义
Private Declare Function GetHarddisk_ID Lib _
"HardDiskSN.dll" (ByVal lpBuffer As String) As Long
Dim Harddisk_ID As String, num As Long
Harddisk_ID = Space(255)
num=GetHarddisk_ID(Harddisk_ID)
MsgBox "硬盘的ID号是:" + Harddisk_ID

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
701
import
I
I
回复
0
查看
597
import
I
顶部