dll이로드 된 학교 프로젝트에서 작업하고 있습니다.dll에서 throw 된 예외 처리
로드 된 dll은 내 프로그램과 로컬 네트워크를 통해 컴퓨터와 PLC 사이의 브리지를 형성하는 Twincat System Manager 사이의 다리 역할을합니다.
변수 풀을 plc에서 내 프로그램으로 읽어야합니다.
Public Function adsReadReal(ByVal Variabelenaam As String) As Single
Dim ds = New TwinCAT.Ads.AdsStream(4 * 8) ' new data stream
Dim br = New System.IO.BinaryReader(ds) 'new binary
Dim hVar = New Integer
Try
ConState(1)
tcclient = New TcAdsClient
ConState(2)
tcclient.Connect(Form1.amsAdress, 801) 'connects the tcclient to the PLC
hVar = tcclient.CreateVariableHandle(Variabelenaam) 'creats a handle for the variable
tcclient.Read(hVar, ds) 'read it
ConState(5)
Return br.ReadSingle() 'convert it from binary to readable for vb
Catch ex As Exception
ConState(0)
PrintEx(ex) 'print out the exception
finally
tcclient.Dispose() 'make the object stop being used to prevent a lingering connection
End Try
Return False
End Function
지금 프로그램이 연결 모듈의 시작
TwinCAT.ADS.dll
라는 DLL을로드 :
이
내가이 작업을 수행하는 방법입니다. 트윈 캣 시스템 관리자가 프로그램을 실행하는 경우 일반적으로 종료하지만, 그렇지 않은 경우는 충돌과 나에게이 오류 제공 :System.DllNotFoundException was unhandled
Message="Kan DLL tcadsdll.dll niet laden: Kan opgegeven module niet vinden. (Uitzondering van HRESULT: 0x8007007E)"
Source="TwinCAT.Ads"
TypeName=""
StackTrace:
bij TwinCAT.Ads.Internal.TcAdsDllWrapper.TcAdsDll.AdsAmsUnRegisterRouterNotification()
bij TwinCAT.Ads.Internal.TcAdsDllWrapper.AmsUnRegisterRouterNotification(Boolean throwAdsException)
bij TwinCAT.Ads.Internal.TcLocalSystem.Dispose(Boolean disposing)
bij TwinCAT.Ads.Internal.TcLocalSystem.Finalize()
약 변환됩니다 :
Cannot load DLL tcadsdll.dll: Cannot find given module. (Exception at HRESULT: 0x8007007E)
이 dll을하지 않습니다 수입 한 제품이므로 반드시 있어야합니다. TwinCAT.ADS.dll
프로그램에서이 오류가 발생하지 않고 프로그램을 정상적으로 종료하지 못하게하려면 어떻게해야합니까? 가능한 모든 dll 관련 작업의 모든 예외를 잡으려고했습니다.
또한 출처는 Bitbucket입니다. 내가 요청하면 그것을 공개 할 것이다. 공식하지만 매우 손재주는 Beckhoff 사이트
일부 링크 :
편집 : 분명히 finnaly 문이 대신 상대 후 사용이 때부터 tcclient.dispose()가 오류가 발생하여 블록을 시도하십시오
편집 : 이것은 현재 예외를 포착하지만 처리하지 못합니다.
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
AddHandler currentDomain.UnhandledException, AddressOf MyHandler
Dim tick As Byte = 0
Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs)
Dim ex As Exception = DirectCast(args.ExceptionObject, Exception)
MsgBox("exception tick" & Str(tick))
tick = tick + 1
PrintEx(ex)
End Sub
편집 : VS2008에 오류가 몇 진드기가
프로그램을 직접 실행하면 내가 F5를 누른 후 (계속) 나타나지만 발생하기 때문에 예외가 제대로 잡힌되지 , I 똑딱 1 개만 볼 수 있습니다. 그런 다음 창에 오류가 발생합니다.
그냥 'catch'문 다음에 finally 절을 추가하십시오. 따라서 프로그램이 비정상적으로 종료 되더라도 처리가 수행됩니다. – JonH
당신이 가져온 라이브러리의 의존성이 누락 된 것처럼 보입니다. – dwerner
@dwerner Twincat이 정상적으로 동작 할 때 발생하지 않습니다. –