我的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>
答案 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)