正在尝试从C++Dll访问C#中的字节数组

Attempting to access byte array in C# from C++ Dll

本文关键字:字节 字节数 数组 访问 C++Dll      更新时间:2023-10-16

所以我试图从C++DLL中推送一个未签名的char数组,并希望在C#GUI中访问它。我把C#设置为IntPtr,我正在尝试Marshal。复制字节数组,但IntPtr始终为NULL,真是大错特错!

如有任何帮助,我们将不胜感激。

以下是代码:

C++DLL标头的一部分

class TEST_API TestClass
{
public:
TestClass(void);
~TestClass(void);
void GetData( unsigned char * testData, unsigned size );
unsigned char testInfo[4096];
};
#ifdef __cplusplus
extern "C" {
#endif
extern TEST_API TestClass* CreateTestClass();
extern TEST_API void DisposeTestClass(TestClass* pObject);
extern TEST_API void TestGetData( TestClass* pObject, unsigned char * testData );
#ifdef __cplusplus
}
#endif

这是C++DLL的部分,它的代码太多了,无法将整个东西放入

extern "C" TEST_API void TestGetData( TestClass* pObject, unsigned char * image )
{
   if(pObject != NULL)
      pObject->GetData( image );
}
void TestClass::GetData( unsigned char * testData )
{
   for ( int i=0; i < 64; i++ )
      for ( int j=0; j < 64; j++ )
             testInfo[j + i*64] = j;
   testData = testInfo;
}

我做的C#代码如下:

IntPtr trial = new IntPtr();
testing.RetrieveTestData(trial, 64, 64);
byte[] managedArray = new byte[64*64];
Marshal.Copy(trial, managedArray, 0, 64*64);
for (int i = 0; i < 64; i++)
   for (int j = 0; j < 64; j++)
      Console.WriteLine(managedArray[j + i * 64]);

基本上,每次的试用IntPtr都是0

我希望有人能帮助我度过难关。感谢

trial作为输入参数传递给RetrieveTestData,这意味着调用者不能更改它。要由调用方更改,参数必须是ref或out