vb.net 언어에서 dll 함수를 호출하면 "보호된 메모리를 읽거나 쓰기합니다. 이것은 보통 다른 메모리가 손상되었음을 표시합니다."

1117 단어
이 문제는 나도 오랫동안 고민했는데, 결국은 나에게 꼬여 주었다.하하...
해결 방법:
바깥 dll 함수를 호출할 때 먼저 모듈 안에서declear를 통해 함수를 성명해야 하고 구조체도 성명해야 한다.모든 데이터의 유형은 dll 설명 문서 안의 것과 일치해야 하며, 절대 소홀히 해서는 안 됩니다!구조체 안에 수조가 있을 때 vb6.0 아래는 직접 크기를 부여할 수 있지만,net 아래에서는 이렇게 하는 것을 허락하지 않습니다.구조체(사실 계승할 수 없는 클래스일 뿐)에서 구조 함수를 성명하고 밖에서 new로 실례 대상을 구축하면 구조 함수를 자동으로 호출할 수 있으며 구조 함수에서 수조 크기를 초기화하면 됩니다!그렇지 않으면 번역이 잘못될 거야!dll 구조 안의 수조 앞에 문장을 붙여서 크기를 제한해야 합니다. 그렇지 않으면 실행할 때 오류가 발생합니다!
예를 들면 다음과 같습니다.
    Public Structure VCI_CAN_OBJ
         Dim ID As UInt32
         Dim TimeStamp As UInt32
         Dim TimeFlag As Byte
         Dim SendType As Byte
         Dim RemoteFlag As Byte
         Dim ExternFlag As Byte
         Dim DataLen As Byte
         <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> _
         Dim data() As Byte
         <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
         Dim Reserved() As Byte
 
         Public Sub New(ByVal a As Int16, ByVal b As Int16)
             ReDim data(a)
             ReDim Reserved(b)
         End Sub
     End Structure
그렇습니다!이렇게 하면 이 문제를 해결할 수 있다!

좋은 웹페이지 즐겨찾기