저는 API DLL이 다른 디렉토리의 파일에 대한 작업을 수행하는 데 사용되는 프로젝트를 공유하는 두 개의 프로그램을 보유하고 있습니다. 내가 가진 문제는이 코드는 하나 개의 프로젝트에서 작동하지만 다른에서 실패 : 이전에이 명시 적으로 연결된 DLL 대리자가 한 프로그램에서 성공하지만 다른 프로그램에서는 성공하지 않는 이유는 무엇입니까?
moduleHandle = LoadLibrary(“api.dll”)
, 프로세스 모니터 로그를 비교 한 후, 그래서 여기에 API의 DLL로의 연결에 실패 실패 프로그램을 둘 다 일부 DLL을 같은 디렉토리에 복사했습니다. 그런 다음 성공했으며 moduleHandle의 값은 이제 두 프로그램에서 동일합니다. 다음 : 우리가 delegateForSomeFunction에 도착했을 때, 나는 그들에 _methodPtr의 값이 하나 개의 프로그램에서 다른 다른 것을 볼 수 있습니다
methodPointer = GetProcAddress(moduleHandle, "NameOfSomeFunction")
delegateForSomeFunction = Marshal.GetDelegateForFunctionPointer(methodPointer, GetType(SomeFunctionType))
. 그런 다음 대리인을 호출 할 때 :
Dim argsArray() As Object = New Object() {directoryPath, errorFilePath}
Dim retVal As Short = delegateForSomeFunction.DynamicInvoke(argsArray)
한 프로그램에서이 메시지는 자동으로 실패합니다. 계속 진행하는 방법에 관해서는 약간의 손실이 있습니다. 더 자세히 조사하려면 어떻게해야하며 어떻게 작동시킬 수 있습니까?
나는 비주얼 스튜디오 2013에서 디버그에서이 작업을 실행 해요, 그리고 API의 DLL의 같은 디렉토리에 WinSxS에의 의존성의 올바른 버전을 복사하는 것은에 저를 허용 않았지만이 프로젝트는 .NET 4