如何在VB中处理输出参数为Char**的DLL函数



我们有这个API 的c++dll文件

BOOL GetPaths(TCHAR **Paths)
{ 
//write data into paths
}

我们将在**路径中,如何调用vb.net并从中获得输出。

VB.net代码:

Public Shared Function GetPaths(<MarshalAs(UnmanagedType.LPArray, 
ArraySubType:=UnmanagedType.LPStr)><InAttribute(), Out()> ByVal strarr() As String) As Boolean

Dim sbs As StringBuilder = New StringBuilder(256)
Dim strArr = New String() {""}
GetDevicePaths(strArr)
Console.WriteLine(strArr(0).ToString)

输出:不是完整的字符串,我只得到第一个元素

TCHAR可以是char,也可以是wchar,这取决于在构建库时是否定义了UNICODE。对于典型的ASCII字母数字字符,宽版本是两个字节,第一个字节的代码与ASCII相同,第二个字节的编码与0相同。因此;output:am只获取第一个元素,而不是完整的字符串";看起来这个库是以unicode构建的,所以TCHAR就是wchar,您将其解释为narrawchar

要解决此问题,请将MarshalAs属性更改为UnamangedType.LPWstr

最新更新