求助各位大神,有个delphi7写的标准DLL,我需要用VB6实现,形式如下
//虚假实现
function WriteCard(StrCardNo: Pchar): Integer; stdcall;
begin
Result := 0;
end;
//虚假实现
function ReadCard(StrCardNo: Pchar): Integer; stdcall;
begin
StrPCopy(StrCardNo, '12345678');
Result := 0;
end;
因为要采用标准DLL,非ActiveX dll,从网上找了相关方法,我的测试方法如下:
1。ThirdPartWriteReadCard.dll这个是要实现的DLL,厂家给出DELPHI源码,即编译后的DLL
2。ClientPrj.exe厂家贴心给出了测试DEMO,用来测试调用DLL,显示返回值
3。我在VB里做了DEMO实现,如下,一切正常
Option Explicit
Private Declare Function WriteCard Lib "ThirdPartWriteReadCard.dll" (ByVal StrCardNo As String) As Long
Private Declare Function ReadCard Lib "ThirdPartWriteReadCard.dll" (ByVal StrCardNo As String) As Long
Private Sub Command1_Click()
On Error GoTo err
Dim StrCardNo As String
StrCardNo = Space$(255)
If ReadCard(StrCardNo) <> 0 Then MsgBox "error"
' strCardNo = StringFromPtr(StrPtr(strCardNo))
MsgBox "卡号:" + StrCardNo + "。"
Exit Sub
err:
MsgBox err.Description
End Sub
4。开始写VB版DLL,并编译为标准DLL,非COM
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, ByVal Source As Any, ByVal Length As Long)
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub Main(): End Sub '请不要修改或删除这一行!!!
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'在这后面写上你的其它 Sub/Function ,或者全部写到其它模块中
'//虚假实现
Public Function ReadCard(ByVal lpCardNo As Long) As Long
ReadCard = 0
Dim curCardNo As String
curCardNo = "bb22303**230304"
CopyMemory ByVal lpCardNo, ByVal curCardNo, LenB(curCardNo)
'====上面代码VB DEMO可以获取字符串,delphi报 vbmsvm60.dll内存写错误
End Function