2011-10-18 12 views
6

Mam bibliotekę składającą się z dwóch części - jednego zestawu .net, który P/Invokes do rodzimej dll 3rd party. W trybie pulpitu działa to dobrze: jednak, odwołując się do złożenia z aplikacji w stylu Metro i uruchamiając ją, rzuca ona System.DllNotFoundException na P/Invoke narzekając, że "Nie można załadować biblioteki DLL": Nie można znaleźć określonego modułu. "Jak P/Invoke do rodzimej biblioteki dll z Metro?

Natywna biblioteka dll nie robi nic specjalnego, ale tworzy tylko wychodzące połączenia TCP/IP z serwerem System nie może tego wiedzieć, ale natywna biblioteka dll może zrobić wszystko. Dlatego podejrzewam, że nie można tego zrobić.

Niektóre zamówienia wyszukiwania dll są wymienione na msdn dotyczące aplikacji stylu Metro, podpowiadając, że można załadować biblioteki dll natywne?

Również znalazłem ten link on msdn mówisz loading „bibliotek” i wymienia PackageDependency w pliku manifestu, ale dla mnie to wciąż niejasna jak dodać dll rodzimych na opakowaniu w taki sposób, że możliwe jest P/Invoke to.

+0

Czy możesz spróbować skomentować elementy TCP/IP w bibliotece DLL i ponownie testować? To rozróżni, że nie znajdziemy DLLa, a nie findind jego zależności. Czy sprawdziłeś także możliwości, które chcesz wykorzystać do wychodzących połączeń internetowych? –

+0

Nie zbudowałem biblioteki dll. To nie jest część rozwiązania. Więc nie mogę zmienić sposobu, w jaki biblioteka DLL została zbudowana. Dobrze, że może to być jakaś wtórna zależność powodująca błąd! Sprawdzę to jak najszybciej. – vidstige

+1

@vidstige Prawdopodobnie rozwiązałeś już ten problem, ale poza tym zapoznaj się z [moją odpowiedzią] (http://stackoverflow.com/a/12122750/650012) na powiązane pytanie. –

Odpowiedz

0

Dodaj go do swojego projektu (kliknij prawym przyciskiem myszy projekt, Dodaj, Istniejący element). Sprawdź, czy we właściwościach tego elementu Treść ma wartość Prawda (domyślnie jest to fałsz).

+0

Dzięki za odpowiedź. Działa to w normalnym środowisku C#, ale próbowałem go i nie mogłem go uruchomić w projekcie Metro. – vidstige

+1

Opisz "nie działa" - błąd kompilacji? tajemniczy zielony ekran podczas premiery? wyjątek rzucony podczas biegu? –

+1

Zaktualizowałem pytanie, podając konkretny komunikat o błędzie! Wyjątek jest wywoływany podczas wywoływania metody za pomocą atrybutu P/Invoke. – vidstige

0

Jest to prawdopodobnie zgodne z projektem. Twój problem może być spowodowany błędem z kodem błędu 126 zwrócony z LoadLibrary. Jeśli aplikacja działa w trybie pulpitu, należy wybrać tryb pulpitu dla swojej aplikacji. Możesz również użyć starszej wersji systemu Windows.

Powiązane problemy