从/向C ++ dll传递/接收来自/到C#代码的byte []的问题。 在执行时它给了我“堆栈平衡”的例外,这意味着,值不匹配。在询问之前阅读一些文章,并尝试了一些......但仍然不明白我在这种情况下如何解决它:
__declspec(dllexport) void doProcessFile(const char* szSource, const char* szPassWord, char *strRet)
{
//simple RC4 encryption. szSource - is byte[]
//szPassWord- string.
//Function returns a byte[] as char*
strRet = RC4EncryptTool::Decrypt(szSource, szPassWord);
}
我试图通过以下方式互操作:
[DllImport("MyDLL.dll", EntryPoint = "doProcessFile")]
public static extern void doProcessFile(byte[] szSource, string szPassWord, ref byte[] strRet);
但那不行。
仍在试验它,无论如何都无法返回byte [] ......
[DllImport("MyDLL.dll", EntryPoint = "doProcessFile", CallingConvention = CallingConvention.Cdecl)]
public static extern void doProcessFile(byte[] szSource, string szPassWord, ref byte[] strRet);
通过将char strRet更改为char strRet和char strRet来改变它...没有...它总是向我显示一个空数组。
阅读那些&尝试过:Get byte[] in C# from char* in C++ 在我的情况下不起作用... byte [] buffer = new byte [256 * 256];从那个解决方案 - 在我的情况下总是空的,C ++部分代码不会将值返回到C#(甚至我无法读取它们)。
我也玩
__declspec(dllexport) char* doProcessFile(const char* szSource, const char* szPassWord)
{
//simple RC4 encryption. szSource - is byte[]
//szPassWord- string.
//Function returns a byte[] as char*
return RC4EncryptTool::Decrypt(szSource, szPassWord);
}
并且:
[DllImport("MyDLL.dll", EntryPoint = "doProcessFile")]
public static extern byte[] doProcessFile(byte[] szSource, string szPassWord);
给我一个错误 - “无法设置重新调整值...”。