У меня есть DLL, которая написана на родном C ++. Имя проекта Visual Studio - MyDll
, и оно компилируется в файл с именем MyDll.dll
в выходном каталоге.
После компиляции я переименую его в MyDll2.dll
. (Этот пример кажется глупым, но у меня есть веская причина переименовать его.)
Второй проект, написанный на C ++ / CLI, использует эту DLL.
Во время компиляции этот проект ссылается на MyDll.lib
(генерируется при компиляции MyDll), чтобы иметь возможность использовать классы, определенные в dll.
Во время выполнения, чтобы загрузить DLL, я вызываю LoadLibrary, передавая полный путь к файлу C:\...\MyDll2.dll
(на самом деле он находится в той же папке). Он успешно загружается, как показывает возвращаемое значение LoadLibrary.
При первом появлении кода, в котором я использую класс, определенный в DLL (просто объявляющий объект в стеке), происходит сбой с SEHException
(эти исключения не дают никакой информации о причине сбоя .. .)
Это происходит только тогда, когда я делаю шаг переименования. Если я оставлю это как MyDll.dll
и вызову LoadLibrary для этого файла, все работает нормально. Так что, очевидно, из-за переименования.
Есть идеи, почему? Мне не разрешено переименовывать DLL?
(РЕДАКТИРОВАТЬ: уточнение путем предоставления более подробной информации)