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

时间:2018-09-04 10:04:54

标签: c++ string vb.net dllimport

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

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

int Prn_Str(char *fmt, …);

他们使用dll的示例应用程序是用C ++编写的。这是一个通话示例:

rc =  Prn_Str((char*)"POS签购单/POS SALES SLIP\n");

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

<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参数声明它,但这也不起作用。

在这里传递字符串的实际方法是什么?

(PS不能将整个应用程序从VB.Net更改为C ++,因为它以前是使用另一个DLL为另一台设备编写的,并且行得通。我正在尝试快速移植到该新设备)< / p>

1 个答案:

答案 0 :(得分:1)

我无法将CharSet设置为ANSI(它不在可用的CharSets下),但是我通过将其作为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)