나는 시스템 dll에 대한 호출을 몇 시간 동안 수행하기 위해 고심하고 있습니다. 나는 마침내 그것이 작동하게하는 방법을 이해했다. 그러나 나는 이유를 모른다.VB.Net ByVal 전달 될 때 ByVal 전달 될 때 내 마샬링 된 구조가 업데이트되는 이유 ByRef
구조체를 라이브러리 함수 midiOutPrepareHeader
에 전달해야하며 그 구조체에는 할당 한 버퍼에 대한 포인터와 라이브러리가 설정하는 일부 플래그가 들어 있습니다. 선언에서 나는 원래 ByRef
lpMidiOutHdr As IntPtr
을 가졌습니다. 명백한 오류는 없었지만 다음 함수 호출은 항상 버퍼가 준비되지 않았 음을보고했습니다 (준비된 플래그가 설정되지 않았습니다). 결국 ByVal
lpMidiOutHdr As IntPtr
으로 변경했을 때 호출 후 구조의 복사본에 플래그가 설정되고 후속 기능이 작동했습니다.
(구조를 검사하고 무슨 일이 있었는지 확인하기 위해 사용한 코드를 제거했지만 기본적으로이 코드는 검사 할 수 있도록 데이터를 "비 정렬"하기 위해 PtrToStructure
을 사용했습니다).
아무도 내가 값으로 전달할 때 dll에서 데이터를 가져 오는 이유를 설명 할 수 있습니까?
감사합니다. Adrian