Jacky8716 2016-10-25 00:30 采纳率: 0%
浏览 937
已结题

VB编写标准DLL实现DELPHI DLL报内存错误

求助各位大神,有个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
  • 写回答

1条回答 默认 最新

  • threenewbee 2016-10-25 02:30
    关注

    vb没法编写“标准dll”,即便通过网上所谓的修改link.exe的方式强制输出导出符号,生成的dll也只能给别的vb程序调用,因为vb程序运行必须先初始化vb虚拟机,这个过程只有vb的exe会做,你生成的所谓dll,如果是delphi调用,没有这个初始化就出错了。
    微软官方也从来没有说vb可以写什么标准dll

    评论

报告相同问题?

悬赏问题

  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)