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.

questionAnswers(2)

yourAnswerToTheQuestion