2013-08-12 10 views
5

Goniłem ten wyjątek w zeszłym tygodniu.Nie można załadować źródła "procedura zaimportowana przez" xxx.dll "." wyjątek?

Sytuacja jest:

Mam aplikacji, która jest napisany w języku C# i zbudowany w Visual Studio 2010. Aplikacja zawiera DLL, który jest owinięcie z niezarządzanego biblioteki kodu. Kod niezarządzany jest napisany w C++ i wbudowany w Visual Studio 2008. Jest to wymagane, ponieważ kod odwołuje się do dodatkowych bibliotek (Qt) i ten kod jest przeznaczony dla wersji WinCE 5 (konieczny ze względu na urządzenia obsługiwane w tym polu).

Próbowałem wielu sugestii, które widziałem tutaj, w tym przy użyciu różnych opiekunów zależności (VS 2008 zależy, dependence_walker i Dependz), a także innych narzędzi, takich jak reflektor i monitorowanie procesu z SysInternals.

Wszystkie narzędzia nie wykazują żadnych problemów (Reflector) lub starych zależności, które są przestarzałe w moim środowisku (Win 7), takich jak DCOMP.DLL, GPSVC.DLL, & IESHIMS.DLL.

W debugerze mogę przechodzić przez mój kod aż do momentu utworzenia obiektu, który odwołuje się do mojej biblioteki DLL programu Managed Wrapper. Nie wchodzi do instancji obiektu, ale natychmiast zgłasza wyjątek.

W Eksploratorze procesów (z SysInternals) widzę załadowany zarządzany plik DLL wraz z niezbędnymi dodatkowymi bibliotekami DLL. W Monitorze procesu (z SysInternals) w punkcie problemu nie ma stosów nie odnalezionych wiadomości. To po prostu zawiedzie.

Wszelkie pomysły i przemyślenia dotyczące znalezienia tego problemu będą mile widziane.

+1

Używasz wersji Qt dla CE na komputerze? Nie szukaj dalej :) Google "ładuje ładowarkę", jeśli chcesz diagnostyki. –

+0

Właściwie nie. Przebudowujemy Qt w wersjach Windows i Windows CE. Ale uruchamiany kod jest taki sam w każdym z nich. – user1542042

+0

Najpierw rozdzielę problemy z ładowaniem części zarządzanych i niezarządzanych. Konwertuj swoje opakowanie do kodu pośredniczącego i spróbuj go załadować. Załaduj bibliotekę C++ do procesu natywnego i zobacz, czy to zadziała, czy nie. Publikowanie fragmentów kodu opakowania może być bardzo pomocne. –

Odpowiedz

2

@Hans Passat - Dziękuję za podpowiedź na globalnych flag.

Here to doskonały blog na temat korzystania z narzędzi. Program gflags.exe, do którego odwołuje się większość odniesień Google'a do "Show Loader Stacks", jest częścią zestawu Windows Device Driver Development Kit (WinDDK) i zarządza ustawieniami rejestru wymienionymi w tym poście.

Wynik działania z "Pokaż stosy programu ładującego" wskazuje, że symbol, który powinien znajdować się w mojej niezarządzanej bibliotece DLL, nie znajdował się w bibliotece DLL, której używałem.

Okazuje się, że budowałem złą wersję biblioteki DLL. Było to spowodowane moim słabym zrozumieniem procesu budowania (zbyt wiele wersji zbudowanych zbyt wiele różnych sposobów).

Powiązane problemy