나는 기본적으로 어디에서 플러그 인 응용 프로그램 환경이 있습니다관리 C DLL을, FileNotFoundException이
호스트 응용 프로그램은 C#을 DLL로 호출 관리되는 C++ DLL로 호출 ++ DLL을 관리되지 않는 C를 호출을
이는 관리되지 않는 C++에서 C#으로 브릿지를 사용하여 호출하는 방법으로 잘 알려져 있습니다. 이 모든 것은 잘 작동하며, 내 dll (관리되지 않는 C++, 관리되는 C++ 및 C#)이 dll을 호출하는 응용 프로그램과 동일한 디렉토리에없는 플러그 인 유형 아키텍처를 제외하고 대부분의 상황에서 잘 작동합니다. 응용 프로그램이 관리되지 않는 C++을 호출 할 때 응용 프로그램이 dll을로드하기 위해 호출 할 디렉토리를 알고 있기 때문에 모두 잘 작동합니다. 그러나 처음 관리되지 않는 C++이 관리되는 C++로 호출하면 FileNotFoundException이 발생합니다. C# dll을 찾지 못했다는 것을 알 수 있습니다 (세 개의 dll은 모두 같은 디렉토리에 있으며 app 디렉토리에는 없습니다). 모든 dll을 exe의 런타임 디렉토리에 저장하면 모든 것이 완벽하게 작동하며 FileNotFoundException을 얻지 못합니다. 하지만 배포 할 때 호출하는 응용 프로그램을 제어 할 수 없으므로 런타임 DLL에 DLL을 삭제할 수 없습니다.
그래서 관리되지 않는 C++ dll이로드 될 때 관리되지 않는 C++ 코드에서 프로그래밍 방식으로 C# dll에 대한로드 디렉토리를 설정할 수 있습니까? SetDllDirectory 시도하고 내 dlls 상주하는 디렉터리에 대한 시스템 성공하지 경로 변수를 설정합니다.
몇 가지 코드를 게시 할 수 있습니까? 예외를 throw하는 API는 무엇입니까? –