Как P/Invoke к родной dll из Metro?

У меня есть библиотека, состоящая из двух частей: одна сборка .net, которая P/вызывает родную стороннюю dll. В настольном режиме это работает просто отлично: однако при ссылке на сборку из приложения в стиле Metro и ее запуске выдается System.DllNotFoundException на P/Invoke жалуется на то, что "Невозможно загрузить библиотеку DLL: указанный модуль не найден".

Собственная dll не делает ничего особенного, а только создает исходящие соединения TCP/IP с сервером. Система не может этого знать, а родная dll может делать что угодно. Вот почему я подозреваю, что это невозможно сделать.

Некоторый порядок поиска dll упоминается в msdn в отношении приложений в стиле Metro, намекая на то, что можно загружать собственные DLL?

Также я нашел эту ссылку на msdn говорит о загрузке "библиотек" и упоминает PackageDependency в файле манифеста, но мне все еще неясно, как добавить в пакет нативную dll так, чтобы ее можно было P/Invoke его.


person vidstige    schedule 18.10.2011    source источник
comment
Можете ли вы попробовать закомментировать материал TCP/IP в DLL и снова протестировать? Это отличает ненахождение DLL от ненахождения его зависимостей. Кроме того, отметили ли вы возможности, которые хотите использовать для исходящего подключения к Интернету?   -  person Kate Gregory    schedule 20.10.2011
comment
Я не собирал dll. Это не часть решения. Поэтому я не могу изменить способ сборки dll. Хорошо, что это может быть какая-то вторичная зависимость, вызывающая ошибку! Проверим это как можно скорее.   -  person vidstige    schedule 20.10.2011
comment
@vidstige Вы, вероятно, уже решили эту проблему, но в остальном, пожалуйста, посмотрите мой ответ на связанный вопрос.   -  person Anders Gustafsson    schedule 25.08.2012
comment
@AndersGustafsson Я поменял работу между ними, поэтому не могу попробовать :-S. Я почти уверен, что это была одна из первых вещей, которые я попробовал.   -  person vidstige    schedule 27.08.2012


Ответы (2)


Добавьте его в свой проект (щелкните правой кнопкой мыши проект, «Добавить», «Существующий элемент».) Убедитесь, что в свойствах этого элемента для параметра «Содержимое» установлено значение «Истина» (по умолчанию оно равно «ложь»). Сборка.

person Kate Gregory    schedule 18.10.2011
comment
Спасибо за Ваш ответ. Это работает в обычной среде С#, но я попробовал и не смог заставить его работать в проекте Metro. - person vidstige; 19.10.2011
comment
Описать не работает - ошибка компиляции? таинственный зеленый экран при запуске? исключение, выброшенное во время работы? - person Kate Gregory; 19.10.2011
comment
Я обновил вопрос с конкретным сообщением об ошибке! Исключение возникает при вызове метода с атрибутом P/Invoke. - person vidstige; 20.10.2011

Это, вероятно, по дизайну. Ваша проблема может быть вызвана ошибкой с кодом ошибки 126, возвращаемой из LoadLibrary. Если ваше приложение работает в режиме рабочего стола, вы должны выбрать режим рабочего стола для своего приложения. Вы также можете использовать более раннюю версию Windows.

person Norbert Willhelm    schedule 02.07.2014