내가 내가하려고 한 C dll은 VB6에서 잘 작동하지만 vb.net에 오류 (보호 된 메모리를 읽거나 쓰려고 시도)
vb.net
에서 사용할 필요가 오래된 VB6 프로그램이 있습니다 이 문제를 해결했지만 해결할 수 없습니다. 나는 dll 파일을 읽고 독서를 위해 rfdi 카드 리더 (RF20E가 호출 됨) 나는 그것을 읽기 카드에서 작동하도록 관리했지만 섹터 읽기에 관해서는 실패했다! 여기 는Dim databuff32 As String * 32
address = 4
sector = 1
loadmode = 0
st = rf_authentication(ByVal icdev, loadmode, sector)
If st <> 0 Then
M1_label.Caption = "Call rf_authentication() error.Exit!"
Exit Sub
End If
st = rf_read_hex(ByVal icdev, address, databuff32)
If st <> 0 Then
M1_label.Caption = "Call rf_read_hex error.Exit!"
Exit Sub
End If
위의 코드는
여기 잘 작동 .H 라이브러리 함수
입니다 VB6Declare Function rf_read_hex Lib "rf20e.dll" (ByVal icdev As Long, ByVal Adr%, ByVal sdata As String) As Integer
을에서 함수 선언하고 여기 VB6의 함수 호출
__int16 __stdcall rf_read_hex(HANDLE icdev,unsigned char _Adr, char *_Data);
하지만 내가 vb.net에서 동일한 작업을 수행하려고하면 보호 된 메모리를 얻습니다. 오류
여기
Public Declare Function rf_read_hex Lib "rf20e.dll" (ByVal icdev As Integer, ByVal Adr%, ByRef sdata() As Char) As Short
Dim sector As Integer = 1
Dim address As Integer = 4
Dim loadmode = 0
st = rf_authentication(icdev, loadmode, sector)
st2 = rf_read_hex(icdev, address, databuff32)
rf_authentication 잘 작동 내 코드입니다!
다른 유형의 databuff32 바이트 char 문자열을 시도했지만 유형 오류 또는 메모리 오류가 발생했습니다!
그러나 유형을 Dim databuff32 As Char
으로 설정하고 감속 기능에서 참조 번호를 ByRef sdata As Char
으로 설정하면 작동하지만 !!!!! 난 단지 첫 번째 값을 아무것도 읽을 수 없다
나는 문제가 그 문자열 * 32 감속하지만 나는 그것을 고칠 수 없다는 것을 확신한다!
도움 주셔서 감사합니다!
감사하지만 내 대답을 않네! 내 문제를 해결 공공 선언 함수 rf_read_hex Lib "rf20e.dll "(ByVal icdev As Integer, ByVal adr 정수, ByVal sdata As StringBuilder) 이것은 짧은 답변으로서 저는 새로운 strgingbuilder (64)로 databuff32를 선언했습니다. 이제는 괜찮습니다. –