У меня есть встроенная DLL, которая является плагином для другого приложения (которое я практически не контролирую).Все работает отлично, пока я не свяжусь с дополнительным файлом .lib (связывает мою DLL с другой DLL с именем ABQSMABasCoreUtils.dll
).Этот файл содержит некоторые дополнительные API из родительского приложения, которые я хотел бы использовать.Я даже не написал ни одного кода для использования какой-либо экспортируемой функции, но только ссылки в этой новой DLL вызывают проблемы.В частности, я получаю следующую ошибку при попытке запустить программу:
Не удалось правильно инициализировать приложение (0xc0000025).Нажмите OK, чтобы закрыть приложение.
Я думаю, я где-то читал, что это обычно происходит из-за функции DllMain, возвращающей FALSE.Кроме того, в стандартный вывод записывается следующее сообщение:
ОШИБКА: попытка выделения памяти перед инициализацией компонента
Я почти на 100% уверен, что это сообщение об ошибке исходит отприложение и не является какой-то ошибкой Windows.
Рассматривая это немного больше (иначе говоря, вращаясь и переключая все переключатели, о которых я знаю), я связался с / MAP и обнаружил это в результирующем .mapfile:
0001:000af220 ??3@YAXPEAX@Z 00000001800b0220 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af226 ??2@YAPEAX_K@Z 00000001800b0226 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af22c ??_U@YAPEAX_K@Z 00000001800b022c f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af232 ??_V@YAXPEAX@Z 00000001800b0232 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
Если я расшифрую эти имена, используя "undname", они приведут следующее (в том же порядке):
void __cdecl operator delete(void * __ptr64)
void * __ptr64 __cdecl operator new(unsigned __int64)
void * __ptr64 __cdecl operator new[](unsigned __int64)
void __cdecl operator delete[](void * __ptr64)
Я не уверен, что понимаю что-либо из ABQSMABasCoreUtils.dll
может существовать в этом файле .map или почему моя DLL даже пытается загрузить ABQSMABasCoreUtils.dll, если у меня нет кода, который ссылается на эту DLL.Может кто-нибудь помочь мне собрать эту информацию и выяснить, почему это не работает?Для чего это стоит, я подтвердил через «dumpbin», что родительское приложение импортирует ABQSMABasCoreUtils.dll
, поэтому оно загружается несмотря ни на что.Я также попытался отложить загрузку этой DLL в мою DLL, но это не изменило результаты.
РЕДАКТИРОВАТЬ
Я дважды проверил, и все файлы являются 64-битными.