2017-05-10 1 views
1

전화 : - 프레임 워크 3.5 - 86 모드를 비주얼 스튜디오 2013와 함께 컴파일액세스 위반 오류 같은 VB6 코드에서 DLL

[DllImport("..\\..\\dll\\Com3964r.dll", EntryPoint = "plc_fetchword")] 
    public static extern void PLCReadWord(
     int com, 
     int Db, 
     int Dw, 
     int data, 
     int RisOper); 

:

Public Declare Sub PLCReadWord Lib "COM3964R.dll" Alias "plc_fetchword" _ 
        (com As Long, _ 
         Db As Long, _ 
         Dw As Long, _ 
         data As Long, _ 
         RisOper As Long) 

C#을 측면에서처럼 변환됩니다. 내 시스템에는 64 비트 CPU와 64 비트 Windows 10이 있습니다.

아래의 코드에서 오류가 발생하면 프로그램 시스템을 실행하십시오. 나는 myDummyDatamyDummyError (두 종류 Int32)가 기록되지 수 있다고 생각 :

ClassPLC.PLCReadWord(Convert.ToInt32(txtCommPort.Text), 
          Convert.ToInt32(txtDbRead.Text), 
          Convert.ToInt32(txtDwRead.Text), 
          myDummyData, myDummyError); 
+0

받은 오류는 무엇입니까? 프로그램을 실행할 때 응용 프로그램이 실행되는 위치와 관련하여 dll 디렉토리에 dll 디렉토리가 2 개 있고 dll 디렉토리에 있는지 확인하십시오. Com3964r.dll을 응용 프로그램과 함께 배포 할 수없는 이유가 있습니까? 그렇다면 \\ .. \\ dll \\을 DllImport에서 제거 하시겠습니까? – denvercoder9

+0

PLCReadWord 함수 호출시 "액세스 위반 오류 처리되지 않음"오류가 발생했습니다. 디렉토리 경로 표기법에 아무런 문제가 없습니다. PLCOpenPort 및 PLC ClosePort는 문제없이 실행됩니다. 이것들은 dll이 반환 된 값을 기다리지 않고 값을 보낼뿐입니다. 그러나 PLCReadWord는 myDummyData 및 myDummyError를 쓸 수 없습니다. – hatcuba

답변

1

VB6 기본값을 매개 변수 ByRef를 전달하여. C#에서는 ref에 해당합니다. 가져온 함수의 C# 선언에있는 모든 매개 변수를 ref으로 변경하십시오.

+0

알라 신이 당신을 축복 수 있습니다. 많은 감사합니다. – hatcuba