Невозможно загрузить DLL в C # - PullRequest
3 голосов
/ 17 февраля 2012

как загрузить dll в проекте c #

ошибка

Невозможно загрузить DLL 'Reader.dll': указанный модуль не может быть найденный. (Исключение из HRESULT: 0x8007007E)

пример кода :

[DllImport("Reader.dll")]
 public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);

изображение: exception screenshot

Ответы [ 4 ]

11 голосов
/ 17 февраля 2012

Если проблема действительно «не может быть найдена», то использование ProcMon от Sysinternals покажет вам, где система ищет DLL.

Однако часто такого рода исключения означают «Я нашел DLLно я не могу загрузить его », и это может быть потому, что отсутствует зависимость от DLL, а не от самой DLL, или потому, что DLL несовместима с приложением, пытающимся загрузить ее.Если ваше приложение C # настроено на «Любой ЦП» и вы работаете на 64-битной машине, вы получите такую ​​ошибку при загрузке неуправляемых 32-битных DLL.

Один из способов изолировать проблему - этосоздайте простой проект C / C ++, который загружает DLL.(Загрузите его динамически с помощью LoadLibrary, если у вас нет доступа к импорте lib.) Затем используйте Dependency Walker для профилирования тестового жгута, и он сообщит имена отсутствующих DLL.

2 голосов
/ 18 февраля 2012

Хотя reader.dll не может загрузить GPSVC.dll и IESHIMS.DLL. мне удалось заставить его работать, запустив команду corflags на application.exe приложение теперь помечено как 32bit :


corflags application.exe /32bit+

Версия: v4.0.30319

Заголовок CLR: 2,5

PE: PE32

CorFlags: 3

ILONLY: 1

32BIT: 1

Подпись: 0

1 голос
/ 17 февраля 2012

Я нашел это в другом посте. Может быть, это поможет вашей ситуации

NUnit "отсутствует" GPSVC.DLL в Windows 7/64

1 голос
/ 17 февраля 2012

Если это простая C DLL, она должна находиться в той же папке, что и .exe.

...