Ошибка «Память не может быть записана» при передаче HGLOBAL из VB.Net в C DLL - PullRequest
0 голосов
/ 30 января 2010

Мы используем Visual Studio 2008 - мое требование состоит в том, чтобы выделить некоторую память, сохранить данные в этой выделенной памяти и передать адрес памяти в DLL, написанную на C. Но при попытке передать этот адрес памяти функции в этой DLL мое приложение вылетает и показывает сообщение «Память не может быть записана».

''//Memory allocation Code
Dim tmpPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Array.GetValue(Array.GetLowerBound(0), Array.GetLowerBound(1))))
''//Copying data to memory
Marshal.StructureToPtr(Array.GetValue(Array.GetLowerBound(0), Array.GetLowerBound(1)), tmpPtr, True)
''//Trying to pass to 'c' dll
StoreStack(tmpPtr)

Я получаю сообщение об ошибке в последней строке. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 30 января 2010

Довольно сложно догадаться, что происходит не так, не зная, какую управляемую структуру данных вы передаете в StoreStack и какую структуру данных она ожидает. Я думаю, что указатель, который вы передаете в StoreStack, меньше ожидаемого.

Вы проверили значение, возвращаемое Marshal.SizeOf(Array.GetValue(Array.GetLowerBound(0), Array.GetLowerBound(1))), чтобы убедиться, что оно возвращает правильный размер?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...