Попытка доступа к байтовому массиву в C # из C ++ Dll

0

Поэтому я пытаюсь нажать массив unsigned char из библиотеки C++ и получить доступ к нему в графическом интерфейсе С#. Я настроил С# как IntPtr, и я пытаюсь Marshal.Copy массив байтов, но IntPtr всегда имеет значение NULL, что-то не так!

Любая помощь будет принята с благодарностью.

Ниже приведен код:

Часть заголовка DLL C++

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;
}

Код С#, который я сделал, следующий:

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 каждый раз

Надеюсь, кто-то поможет мне в этом. благодаря

  • 0
    А RetrieveTestData делает именно то, что?
  • 0
    RetrieveTestData в основном вызывает GetData в C ++ DLL, я надеялся, что TestData получит адрес testInfo, который является переменной-членом, и будет передан в C #
Показать ещё 2 комментария
Теги:

1 ответ

0

trial передается RetrieveTestData в качестве входного параметра, то есть он не может быть изменен вызывающим. Для изменения вызывающим абонентом параметр должен быть либо ref, либо out

Ещё вопросы

Сообщество Overcoder
Наверх
Меню