2010-01-30 3 views
0

우리는 Visual Studio 2008을 사용하고 있습니다. 제 요구 사항은 메모리를 할당하고 할당 된 메모리에 데이터를 저장 한 다음 메모리 주소를 C로 작성된 DLL. 그러나이 DLL의 함수에이 메모리 주소를 전달하려고하면 응용 프로그램이 충돌하고 "메모리를 쓸 수 없습니다"라는 메시지가 표시됩니다.VB.Net에서 C DLL로 HGLOBAL을 전달하는 "메모리를 쓸 수 없습니다"오류

''//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) 

마지막 줄에 오류가 표시됩니다. 아무도 도와 줄 수 있습니까?

+0

와우, 제목이 너무 길어요. – Sam152

+0

'StoreStack'의 기능은 무엇입니까? –

+0

젠체하는, 나는 편집하고 있었다, 누군가는 그것에 나를 때렸다! 오, 글쎄, 난 아직도 그것에 대한 몇 가지 작업을 할 수 ... – RCIX

답변

0

StoreStack에 전달하는 관리 데이터 구조와 예상되는 데이터 구조를 알지 못하면 무엇이 잘못 될지 알기가 어렵습니다. 내 생각 엔 StoreStack에 전달할 포인터가 예상보다 작습니다.

올바른 크기를 반환하는지 확인하기 위해 Marshal.SizeOf(Array.GetValue(Array.GetLowerBound(0), Array.GetLowerBound(1)))에 의해 반환 된 값을 확인 했습니까?

+0

또한 메모리를 할당하는 중 문제가 발생할 수 있습니다 ... 적절한 메모리 크기를 얻지 못하는 경우 ... 두 개의 차원 배열로 할당 된 전체 메모리 크기를 얻는 방법을 알려주십시오. - 감사합니다. – Avinash

관련 문제