C ++ CLR非托管BYTE *到托管System :: array <byte> ^没有循环

时间:2015-11-06 06:51:51

标签: c++ arrays pointers type-conversion clr

我试图在我的问题上找到工作解决方案,但没找到。 我想&#34; connect&#34;使用本机C ++代码(DLL)管理C#.NET代码。我的C ++返回非托管BYTE *指针和元素数。 如何在没有循环的情况下从array<Byte>^初始化新的BYTE*?因为它可能是5兆字节。 (加密数据) 如果可以请帮忙。

修改

使用循环工作:

    array<Byte>^ a = gcnew array<Byte>(resultDataSize);
    for (int i = 0; i < resultDataSize; i++)
    {
        a[i] = resultData[i];
    }

但我想得到类似的东西:

a = new array<Byte>(resultData, resultDataSize);

编辑2:

现在在我的C ++中我有功能:

void Decrypt(BYTE* dataToDecrypt, DWORD dataToDecryptLength, wchar_t* senderName, wchar_t* receiverName, BYTE** result, DWORD* resultSize)
{
...
*result = main.Data;
*resultSize = main.Length;
}

其中main是具有BYTE *数据和DWORD长度等功能的类。 在我的CLR中:

array<Byte>^ Decrypt(array<Byte>^ dataToDecrypt, String^ senderName, String^ receiverName)
{
...
BYTE* resultData = nullptr;
DWORD resultDataSize = 0;
// Call my c++
DecryptFunction(dataToDecryptBytes, dataToDecrypt->Length, sender, receiver, &resultData, &resultDataSize); 

array<Byte>^ result = gcnew array<Byte>(resultDataSize);
for (int i = 0; i < resultDataSize; i++)
{
    result[i] = resultData[i];
}
....
return result;
}

在C#中:

byte[] data = ...;
...
byte[] decrypted = provider.Decrypt(data, "user1", "user2");
...

0 个答案:

没有答案