Maneira correta de marshall uchar [] de dll nativo para byte [] em c #
Eu estou tentando empacotar alguns dados que minha dll nativa alocado via CoTaskMemAlloc em meu aplicativo c # e me perguntando se a maneira que eu estou fazendo isso é simplesmente errado ou eu estou faltando alguma decoração sublime do método c # lado.
Atualmente tenho lado c + +.
extern "C" __declspec(dllexport) bool __stdcall CompressData( unsigned char* pInputData, unsigned int inSize, unsigned char*& pOutputBuffer, unsigned int& uOutputSize)
{ ...
pOutputBuffer = static_cast<unsigned char*>(CoTaskMemAlloc(60000));
uOutputSize = 60000;
E no lado C #.
private const string dllName = "TestDll.dll";
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport(dllName)]
public static extern bool CompressData(byte[] inputData, uint inputSize, out byte[] outputData, out uint outputSize );
...
byte[] outputData;
uint outputSize;
bool ret = CompressData(packEntry.uncompressedData, (uint)packEntry.uncompressedData.Length, out outputData, out outputSize);
aqui outputSize é 60000 como esperado, mas outputData tem um tamanho de 1, e quando eu memset o lado do buffer c ++, parece copiar apenas 1 byte, então isso é errado e eu preciso empacotar os dados fora da chamada usando um IntPtr + outputSize, ou há algo sublime que eu estou faltando para começar a trabalhar o que eu já tenho?
Obrigado.