2013-08-12 2 views
5

나는 지난 주 동안이 예외를 쫓고있다."xxx.dll로 가져온 프로 시저를로드 할 수 없습니다"소스를 어떻게 찾을 수 있습니까? 예외?

상황은 다음과 같습니다

나는 응용 프로그램은 관리되지 않는 코드 라이브러리의 래퍼 DLL을 포함 2010 년 Visual Studio에서 C#으로 작성하고 구축 된 응용 프로그램이 있습니다. 비 관리 코드는 C++로 작성되었으며 Visual Studio 2008에서 작성되었습니다.이 코드는 추가 라이브러리 (Qt)와 코드 대상 WinCE 버전 5 (필드에서 지원되는 장치로 인해 필요함)를 필요로하기 때문에 필요합니다.

다양한 종속성 워커 (VS 2008에 종속 됨, dependency_walker 및 Dependz)를 비롯하여 SysInternals의 Reflector 및 Process Monitor와 같은 다른 도구를 사용하여 여기에서 보았던 많은 제안을 시도했습니다.

모든 도구 (리플렉터) 나 DCOMP.DLL, GPSVC.DLL, & IESHIMS.DLL과 같은 내 환경 (Win 7)에서 사용되지 않는 이전 종속성을 표시하지 않습니다.

디버거에서 내 Managed Wrapper DLL을 참조하는 개체를 인스턴스화 할 때까지 코드를 단계별로 실행할 수 있습니다. 그것은 객체의 인스턴스화를 시작하지 않지만 즉시 예외를 throw합니다.

Process Explorer (SysInternals)에서 필요한 보조 DLL과 함께로드 된 Managed DLL을 볼 수 있습니다. 문제의 시점에있는 프로세스 모니터 (SysInternals에서)에는 발견되지 않은 메시지 스택이 없습니다. 그냥 실패합니다.

이 문제를 찾는 데 도움이되는 아이디어 나 의견이 있으면 알려주세요. 작업에 대한

+1

데스크톱 컴퓨터에서 CE 용 Qt 버전을 사용하고 있습니까? 진단을 원한다면 Google 로더 스냅을 더 이상 보지 마십시오. –

+0

사실 아니요. Windows 및 Windows CE 버전 모두에서 Qt를 재구성합니다. 그러나 실행되는 코드는 각각 동일합니다. – user1542042

+0

먼저 관리되는 부분과 관리되지 않는 부분을로드하는 문제를 구분합니다. 래퍼를 스텁으로 변환하고로드하려고 시도합니다. 네이티브 프로세스에 C++ dll을로드하고 이것이 작동하는지 아닌지 확인하십시오. 래퍼 코드를 게시하면 도움이 될 수 있습니다. –

답변

2

Hans Passat @는 - 글로벌 플래그에 대한 힌트를 주셔서 감사합니다.

Here은 도구를 사용하는 훌륭한 블로그 게시물입니다. "Show Loader Stacks"에 대한 대부분의 Google 참조에서 언급 한 gflags.exe 프로그램은 Windows Device Driver Development Kit (WinDDK)의 일부이며 해당 게시물에서 언급 한 레지스트리 설정을 관리합니다.

"Show Loader Stacks"와 함께 실행되는 출력은 관리되지 않는 DLL에 있어야하는 심볼이 내가 사용하고 있던 DLL에 없다는 것을 나타냅니다.

잘못된 버전의 DLL을 제작하고있는 것으로 나타났습니다. 이것은 빌드 프로세스에 대한 나의 가난한 이해 때문이었습니다 (너무 많은 버전이 너무 많은 방법을 구축했습니다).

관련 문제