关于VB调用VC制作的动态链接库时VC方面的字符指针转换成VB里面的字符串问题。
具体如下:
VB函数如下:
Private Sub Read_Data_Click()
Dim iStartAdds, iLen, sData As String
Dim rst As Long
iStartAdds = decval(StartAddress.Text)
iLen = decval(DataLen.Text)
sData = Space(3000)rst = CardMem_Read(1, GetCardType(), iStartAdds, iLen, sData, 2)
'这个函数是VC制作的动态链接库里面的函数,sData,是调用函数后返回来的字符串指针
DataRW.Text = sData
ResultMSG (rst)
End Sub
VB里面函数申明如下:
Private Declare Function CardMem_Read Lib "D:\VBProj\DLLDemo0828\CardRdDll.dll" (ByVal nPort As Integer, ByVal nCardType As Integer, ByVal nAddr As Integer, ByVal nLen As Integer, ByVal sResp As String, ByVal fAscToBCD As Integer) As Long
在VB环境下调试会自动关闭VB程序,这是因为内存的分配问题没有分配足够的空间,如何解决?
在VC环境下调试能够得到我要的数据,但是,也是执行不下去,郁闷,不知哪位高手可以帮忙。

解决方案 »

  1.   

    写完了编译成exe执行exe就好了
      

  2.   

    改一下试试:
    Dim iStartAdds as Integer, iLen as Integer, sData As String
      

  3.   

    lhfcsdn(不断努力ing) 所指出的是我的一个疏忽,但是后来我改了也还是不行!
      

  4.   

    纯属建议,我没试过。在外工作,没有环境。增加dll参数 :sdata的长度 vb中在dll申明时 用long型 再memcpy。或者 dll申明处用long型
         使用的时候  dim sdata as string
         sdata=space(3000) 
         带入函数的时候 用strptr(stada)