【发布时间】:2014-10-31 20:12:39
【问题描述】:
我有一个用 C 编码的 DLL,它具有将图像数据输出为 unsigned char *、在不同图像格式之间进行转换等功能。我有一个客户想从 C# 中使用它。我猜 C# 端的适当数据类型应该是 byte []。
我认为 PInvoke 会有所帮助,但我找不到合适的技术将这种“二进制数据”编组到 C#(其可变长度存储在单独的变量中)。我见过的所有编组示例都涉及以 null 结尾的字符串,并且图像数组不会在 ascii null 处停止。
我已经看到我可能会考虑通过 IntPtr 将指针传递给数据,但它 看起来这将涉及 C# 端的不安全代码。
【问题讨论】:
-
您可以使用 IntPtr 而不会不安全。使用 Marshal 类的方法。您也可以使用 byte[] 进行编组。所以关于你的函数是什么样子的想法会有所帮助。
-
我们真正需要知道的是谁调用了互操作(托管端或非托管端),以及数据是什么以及它以何种方式流动。