如何将字节数组从vb.net传递到C ++ DLL中

时间:2017-10-27 11:51:44

标签: vb.net

我需要从我的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)

这会从条形码定义无效的函数中收到错误消息。

1 个答案:

答案 0 :(得分:1)

你的问题就在这一行:

ByteDef = System.Text.Encoding.Default.GetBytes("3422", 0, 4)

您无法将字符串转换为字母数组,因为数字 字符 实际数字不同。例如,字符"3"实际上以字节形式由51表示。

对结果数组的简单验证会向您显示:https://dotnetfiddle.net/R3Qcuq

最后你应该 从不 将字符串转换为字节数组 如果你要求它保持特定字节。字符串是字符串,字节数组是字节数组。将它们分开,除非你有充分的理由转换为其中一种。

在您的情况下,解决方案很简单,只需使用您需要的字节初始化一个新的字节数组:

ByteDef = New Byte() {3, 4, 2, 2}