将C#中的byte []传递给C ++中的const char *并输出

时间:2017-10-16 13:37:44

标签: c# c++ dllimport

从/向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);

给我一​​个错误 - “无法设置重新调整值...”。

0 个答案:

没有答案