我有以下用非托管 c++ 编写的函数,我想从 VB.net 代码中调用它。对我来说主要问题是该函数要求将第一个参数作为指针传递。而在 Visual basic 中,我们没有像 c++ 这样的指针。
那么如何从 vb.net 调用这个函数呢?
__declspec(dllexport) void __stdcall setup(char *name, int &maxchars)
在这里查看数据类型的映射。
Imports System.Runtime.InteropServices;
Declare Auto Sub setup Lib "xxx.dll"
(ByVal name as String, ByRef maxchars as Integer)`.
我会像这样 p/invoke 它:
Imports System.Runtime.InteropServices
....
<DllImport("MyLib.dll", CharSet:=CharSet.Ansi)> _
Private Sub setup(ByVal name As String, ByRef maxchars as Integer)
End Sub
您需要指定字符集是ANSI
因为 C 代码接收char*
. 您不需要指定调用约定,因为默认值stdcall
与本机代码匹配。