调用非托管代码C++;VB.NET中的动态链接库 我有一个问题,需要重用从VB 6到VB.NET .c/dp>的C++ DLL。 我的一个同伴在VB6.0编程了一个代码,调用了在VC 6 ++中编程的ANSI C++ + DLL。

调用非托管代码C++;VB.NET中的动态链接库 我有一个问题,需要重用从VB 6到VB.NET .c/dp>的C++ DLL。 我的一个同伴在VB6.0编程了一个代码,调用了在VC 6 ++中编程的ANSI C++ + DLL。,c++,vb.net,unmanaged,C++,Vb.net,Unmanaged,函数声明如下: CTYPE DWORD CCONV标识(HWND newhventana,char*fichelogoni,char*mensaerror) VB6.0中以前的代码以这种方式调用此dll status=IniciaGestion(Me.hWnd,“DRVCOMM2.ini”,mensaerror) 其中mensaerror是一个输出参数,定义为 Public mensaerror作为字符串*256 现在我可以从VB.NET使用这个dll了吗 我对第三个参数的声明有问题。 我

函数声明如下:

CTYPE DWORD CCONV标识(HWND newhventana,char*fichelogoni,char*mensaerror)
VB6.0中以前的代码以这种方式调用此dll

status=IniciaGestion(Me.hWnd,“DRVCOMM2.ini”,mensaerror)
其中
mensaerror
是一个输出参数,定义为

Public mensaerror作为字符串*256
现在我可以从VB.NET使用这个dll了吗

我对第三个参数的声明有问题。
我正在使用这个声明

_
指定的公共共享函数(ByVal a为整数,ByVal b为字符串,ByRef c为字符串)长度为
函数调用如下

Dim mensaerror作为字符串
类1.IniciaGestion(Me.Handle,“C:\\Windows\\DRVCOMM2.ini”,mensaerror)
我正在调试,函数被调用,但是当我在C++代码中分配值为<代码> MeaSaleEng/<代码>时,产生异常。
有人能帮我在VB.NET中声明吗?

请在代码前面使用4个空格-这样更容易阅读

<System.Runtime.InteropServices.DllImport("YourDLL.dll")> _
Public Shared Function IniciaGestion(ByVal a As IntPtr, ByRef b As String, ByRef c As String) As Long
End Function

Private Sub CallCode()
    Dim mensaerror As String = ""
    IniciaGestion(Me.Handle, "C:\Windows\DRVCOMM2.ini", mensaerror)
End Sub
_
初始化中的公共共享函数(ByVal a作为IntPtr,ByRef b作为String,ByRef c作为String)长度为
端函数
专用子调用代码()
Dim mensaerror As String=“”
初始化(Me.Handle,“C:\Windows\DRVCOMM2.ini”,mensaerror)
端接头
应该执行此任务…

将IAgestion Lib“GestionPrg.dll”中的Ansi函数(ByVal a作为IntPtr,ByVal b作为字符串,ByVal c作为字符串)声明为整数
在调用之前,不要忘记为
c
分配空间,例如

Dim mensaerror As String=空格(256)
NET实现这一点的更多方法是使用
StringBuilder
,不过:

Public将IAgestion Lib“GestionPrg.dll”(ByVal a作为IntPtr,ByVal b作为String,ByVal c作为StringBuilder)中的Ansi函数声明为整数
在调用之前为其设置所需的容量:

Dim mensaerror=新StringBuilder(256)

除非您真正知道自己在做什么,否则在VB中调用外部库时,您永远不会声明字符串
ByRef
。“more.NET方法”是不使用“declare”-使用“DllImport”属性“Declare”在VB中只是为了与VB6向后兼容。您有点错过了要点,但可以肯定的是,这可能比.NET更重要。话虽如此,
Declare
当然不仅仅是为了向后兼容,因为他们添加了原始VB中不存在的
Ansi/Unicode/Auto
功能,而且他们也不推荐或不推荐使用,就像他们所做的那样与VB6命名空间有关。”“Declare”是VB6语法,不是VB6命名空间问题。