我需要从我的vb.net应用程序调用此C DLL函数:
HRESULT WINAPI MyTestFunc(BYTE *ByteDef );
Parameters
ByteDef The length of this array is variable.
ByteDef[0] Range from 3 to 5.
ByteDef[1] Range from 1 to 8.
ByteDef[2] Range from 1 to 15.
ByteDef[3] Range from 1 to 8. It must be 2 (8 bit data).
第一个问题是如何在我的vb.net应用程序中定义此功能? 我尝试过以下方法:
Declare Function MyTestFunc Lib "xxx.dll" (ByVal ByteDef As Byte()) As Integer
第二个问题是如何将barcodedef参数传递给它? 我尝试过如下:
ByteDef = System.Text.Encoding.Default.GetBytes("3422", 0, 4)
Result = MyTestFunc(ByteDef)
这会从条形码定义无效的函数中收到错误消息。
答案 0 :(得分:1)
你的问题就在这一行:
ByteDef = System.Text.Encoding.Default.GetBytes("3422", 0, 4)
您无法将字符串转换为字母数组,因为数字 字符 与 实际数字不同。例如,字符"3"
实际上以字节形式由51
表示。
对结果数组的简单验证会向您显示:https://dotnetfiddle.net/R3Qcuq
最后你应该 从不 将字符串转换为字节数组 如果你要求它保持特定字节。字符串是字符串,字节数组是字节数组。将它们分开,除非你有充分的理由转换为其中一种。
在您的情况下,解决方案很简单,只需使用您需要的字节初始化一个新的字节数组:
ByteDef = New Byte() {3, 4, 2, 2}