이것은 나에게 까다로운 문제입니다.const int * const buffer []를 C#으로 가져 오는 방법은 무엇입니까?
byte[] buffer
문제가 DLL이 그 매개 변수 위의 사용과 함수를 호출 할 때 내가 AccessViolation 예외를 얻고 있다는 것입니다 :
const int * const buffer[]
현재, 나는 다음과 같이 번역해야합니다.
도움 주셔서 감사합니다.
이것은 나에게 까다로운 문제입니다.const int * const buffer []를 C#으로 가져 오는 방법은 무엇입니까?
byte[] buffer
문제가 DLL이 그 매개 변수 위의 사용과 함수를 호출 할 때 내가 AccessViolation 예외를 얻고 있다는 것입니다 :
const int * const buffer[]
현재, 나는 다음과 같이 번역해야합니다.
도움 주셔서 감사합니다.
두const
은 분명히 너가 그것을 바꿀 수 없다는 표시가 있어야한다 :-). 그러나 포인터가 변경해서는 안되는 상태 중 하나 인 포인터는 포인터가 가리키는 데이터가 변경되지 않아야한다고 진지하게 주장합니다.
그런 이유로 액세스 위반이 발생합니다.
당신이해야 할 일은 복사입니다. 그냥 캐스팅하지 않고 다른 데이터를 저장하는 것이 아니라 다소 덜 const입니다. 힌트 : Buffer.BlockCopy가 방법입니다.
sizeof(int) > sizeof(byte)
아니요? 그렇다면 문제가 발생할 것입니다.
const 수정자는 PInvoke 서명에 영향을주지 않지만 데이터 처리 방법에 영향을 줄 수 있습니다. 버퍼 매개 변수가 정수에 대한 포인터의 배열이기 때문에 올바른 번역은 다음과 같습니다
IntPtr[] buffer;
편집 : 그것은 이제 더 AccessViolation 예외를 작동하지 않습니다,하지만 난 그런 배열에서 제대로 데이터를 검색하는 방법을 모르겠어요.
예제 파일이 유형의 액세스 사용된다
buffer[0][i]
buffer[1][i]
을하지만 [완충액 만 1 포인터를 가지고있다. 그 포인터는 2 차원 배열에 대한 포인터입니까? .NET으로 마샬링하는 방법? 감사!
업데이트 된 정보로 원래 질문을 편집하십시오. 이것은 답이 아닙니다. :) –
바이트 배열을 4 배 더 크게 만들 수 있습니다. 그건 내 추측 일텐데. – paxdiablo