我的页眉文件。
extern "C" class MyFuncs
{
public:
__declspec(dllexport) unsigned char PassImage(unsigned char buffer, int size);
};
CPP档案。
unsigned char MyFuncs::PassImage(unsigned char buffer, int size)
{
return buffer;
}
除非我将缓冲区返回给我的主应用程序,否则一切正常。
[DllImport("ExampleDLL.dll", EntryPoint = "?PassImage@MyFuncs@Funcs@@QAEXEH@Z")]
public static extern byte[] PassImage(byte[] a, int count);
当我将unsigned char返回到byte []时发生错误。
如果我将byte []更改为byte,则返回一个无错误的值。
这是确切的错误:
无法封送'返回值':无效的托管/非托管类型 组合
如何接受unsigned char to byte []?
答案 0 :(得分:0)
unsigned char
应为unsigned char *
:)
编辑: 您还需要传递数组的长度并将其作为C#中的字节指针处理,因为.NET不知道它的长度。本文描述:https://stackoverflow.com/questions/8268625/get-pointer-on-byte-array-from-unmanaged-c-dll-in-c-sharp
答案 1 :(得分:-1)
在C ++中,您返回unsigned char
,这是一个字节长。在C#中,您需要一个字节数组。您可能希望从C ++返回unsigned char *
。