我试图在我的问题上找到工作解决方案,但没找到。
我想" connect"使用本机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");
...