我们有这个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
。