Почему cl.exe не создает действительный модуль Windows? - PullRequest
0 голосов
/ 24 августа 2009

У меня есть простая C DLL, которая предоставляет функции из статической библиотеки. DLL компилируется без ошибок, и я могу запустить DUMPBIN на ней, чтобы увидеть экспорт. Однако, когда я пытаюсь загрузить его с помощью DllImport в C #, он говорит следующее:

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

Это точно в правильном каталоге. Итак, я прочитал, что было бы неплохо попробовать Dependency Walker на случай, если мне нужно будет включить что-то еще. К сожалению, когда я пытаюсь открыть свою DLL в DW, я получаю это:

Ошибка: хотя бы один файл не был 32-разрядным или 64-разрядным модулем Windows.

Вот моя cl команда:

set ERL_INTERFACE_DIR=C:\Progra~1\erl5.7.2\lib\erl_interface-3.6.2\
call vcvars32.bat
cl /I%ERL_INTERFACE_DIR%include /LD ei.c ei.lib Ws2_32.lib /link /LIBPATH:%ERL_INTERFACE_DIR%lib

Что может быть причиной этого?

1 Ответ

0 голосов
/ 24 августа 2009

Я связывался с файлом LIB, имя которого совпадает с файлом LIB, который генерирует компилятор, поэтому он связывался с самим собой. Я просто изменил имя моего исходного файла на ErlInterface.c. Я думаю, что компоновщик выдаст предупреждение или что-то еще, когда это произойдет, но это не так.

В любом случае, я могу сейчас открыть DLL в Dependency Walker, но я все еще не могу использовать ее с DllImport. Но это для другого вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...