将C#字节[]传递给C API
Pass C# Byte[] to C++ API
我必须将包含MAC地址的字节数组传递到C 方法。由于我没有太多与C合作的经验C Apisi不知道该怎么做。我尝试通过数组本身,但是从API 中获得了invalid parameter code
。我还尝试创建IntPtr
,但无济于事。
我知道问题是C 无法处理托管数据类型,例如数组,因此我认为我可以以某种方式创建一个非托管的数组。
这是C 方法的定义:
ll_status_t LL_Connect(
ll_intf_t intf,
uint8_t address[6]);
C#中的数组按以下方式定义:
Byte[] addr = new Byte[6];
当然,数组不是空的。
例如:
C
extern "C"
{
__declspec(dllexport) void GetData(uint8_t* data, uint32_t length)
{
for (size_t i = 0; i < length; ++i)
data[i] = i;
}
}
c#
[DllImport("LibName.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern void GetData([In, Out] [MarshalAs(UnmanagedType.LPArray)] byte[] data, uint length);
并在C#
中使用 byte[] data = new byte[4];
GetData(data, (unit)data.Lenght);
如果您的数组固定长度,例如:
C
extern "C"
{
__declspec(dllexport) void GetData(uint8_t data[6])
{
for (size_t i = 0; i < 6; ++i)
data[i] = i;
}
}
c#
[DllImport("LibName.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern void GetData([In, Out] [MarshalAs(UnmanagedType.LPArray, SizeConst = 6)] byte[] data);
并在C#
中使用 byte[] data = new byte[6];
GetData(data);
对于您的情况:
[DllImport("LibName.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int LL_Connect(byte intf, [In, Out] [MarshalAs(UnmanagedType.LPArray, SizeConst = 6)] byte[] address);
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 用于访问容器<T>数据成员的正确 API
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 将C#字节[]传递给C API
- 如何通过libpq c api插入字节的数组
- 如何使用节俭C++ API 在 HBase 中存储字节数组(突变结构中的值是文本 ..)
- 程序员思维过程:确定将ReadFile与Windows API一起使用时要读取的最大字节数
- 是否有Windows API以原子方式设置16字节数组
- 通过 WinSock2 API 的单次调用"recv()"函数调用获取全部接收字节
- 转换之间的双和字节数组,为传输ZigBee API