Здравствуйте
Проблема странная, но есть. При подключении DLL с помощью LoadLibrary она возвращает 0, а GetLastError = 126 — "Не найден указанный модуль". Эта ошибка вроде как должна появляться только если не найдены модули от которых зависит моя DLL, но они все рядом! Проверял с помощью Dependency Walker — больше никакие не нужны вроде как (он сказал что нужна msvcr80.dll её и всех похожих на нее я подложил рядом, при этом, vc2005 цепляет ее при запуске сам судя по 'core.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_...\msvcp80.dll', No symbols loaded. ). DLL пробовал цеплять и с абсолютными путями, и с относительным....
Возможно ли что причина в самой DLL-ке? Проверил dllmain — она всегда возвращает true, записи в лог нету — значит dllmain ещё не вызывалась вообще?
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
FILE* f = fopen("log.txt", "a");
fputs("dll test!", f);
fclose(f);
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Сама по-себе длл-ка содержит одну ф-ию отдающую экземпляр класса:
extern "C" __declspec( dllexport ) ISubSys* createSubSys(ICoreSubSys* core)
...
В общем, компиляется, а потом — такая задница....
Могу выложить саму DLL для вскрытия, могу приложить список внешних длл которые положил рядышком... помогите! целый день над этим бьюсь....
Здравствуйте, JumangeeNET, Вы писали:
JNE>Проблема странная, но есть. При подключении DLL с помощью LoadLibrary она возвращает 0, а GetLastError = 126 — "Не найден указанный модуль". Эта ошибка вроде как должна появляться только если не найдены модули от которых зависит моя DLL, но они все рядом! Проверял с помощью Dependency Walker — больше никакие не нужны вроде как (он сказал что нужна msvcr80.dll её и всех похожих на нее я подложил рядом, при этом, vc2005 цепляет ее при запуске сам судя по 'core.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_...\msvcp80.dll', No symbols loaded. ). DLL пробовал цеплять и с абсолютными путями, и с относительным....
Я так понял, что core.exe — это ваш главный исполняемый файл, тот который загружает библиотеку с помощью LoadLibrary?
Если это так, то приведенное сообщение ('core.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_...\msvcp80.dll', No symbols loaded) говорит лишь о том, что msvcr80.dll загрузилась для этого экзешника, и не факт, что библиотека тоже её подхватит. Проверьте в ресурсах dll наличие правильного манифеста для SxS. Там должно быть что-то вроде такого:
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
Здравствуйте, axxie, Вы писали:
A>Там должно быть что-то вроде такого:
A>A> <dependency>
A> <dependentAssembly>
A> <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
A> </dependentAssembly>
A> </dependency>
A>
Примерно такое есть. Проблема решилась — дело было в том, что я случайно пытался юзать юникод-версию LoadLibrary! Перейдя на LoadLibraryA всё стало ок
JNE>Примерно такое есть. Проблема решилась — дело было в том, что я случайно пытался юзать юникод-версию LoadLibrary! Перейдя на LoadLibraryA всё стало ок 
LoadLibraryA не что иное как конверсия переданного параметра в юникод и вызов LoadLibraryW. Так что проблема была в каком-то другом месте.