如何将 VB.Net 字符串作为字符*传递给C++dll?



我的 VB.Net 程序在 Win CE 设备上运行,并使用制造商提供的 C++ dll 来使用连接的打印机。

他们的文档列出了函数调用,如下所示:

int Prn_Str(char *fmt, …);

他们使用 dll 的示例应用是用 C++ 编写的。下面是一个调用示例:

rc =  Prn_Str((char*)"POS签购单/POS SALES SLIPn");

所以在我的代码中,我声明了这个函数:

<DllImport("VAx_VPOS396_APPAPI.dll", EntryPoint:="Prn_Str", CharSet:=CharSet.Unicode)> _
Private Shared Function Prn_Str(ByVal txt As String) As Integer
End Function

并致电:

Dim printthis as String = "Test"
Prn_Str(printthis)

我的问题是这似乎只传递了字符串的第一个字母/字符——因为打印输出只显示每行/调用的第一个字母。我尝试使用 StringBuilder 参数声明它,但这也不起作用。

在此处传递字符串的实际方法是什么?

(附言将整个应用程序更改为从 VB.Net C++不是一种选择,因为它以前是使用另一个DLL为另一台设备编写的,并且有效。我正在尝试快速移植到这个新设备(

我无法将 CharSet 设置为 ANSI(它不在可用的 CharSet 下(,但我通过将其作为 ASCII 编码的字节数组传递来解决此问题。

<DllImport("VAx_VPOS396_APPAPI.dll", EntryPoint:="Prn_Str")> _
Private Shared Function Prn_Str(ByVal txt As Byte()) As Integer
End Function

和:

Dim printthis as String = "Test"
Dim ascii as new ASCIIEncoding
Dim eb as Byte() = ascii.GetBytes(printtthis)
Prn_Str(eb)

最新更新