Re: ERROR_INVALID_PARAMETER при LoadLibrary
От: wisp Украина  
Дата: 20.10.11 11:36
Оценка:
Здравствуйте, nugaev.t, Вы писали:

NT>Здравствуйте. Второй день бьюсь с тривиальной задачей загрузки Dll.

NT>Проблема:
NT>Имеется dll, разработка ведется на Win7, VS2010 . Тестирование ведется на машине с WinXP SP3 для отладки там установлена VS2010.
NT>До вчерашнего дня с загрузкой библиотеки никаких проблем не возникало.
NT>Скомпилированная на машине с Win7 библиотека на машине WinXP загружается без проблем,
NT>но скомпилированная на WinXP библиотека не грузится ни на XP ни на Win7 с ошибкой 87 (ERROR_INVALID_PARAMETER).
NT>Размер у библиотек разный.
NT>Рассмотрел вариант с зависимостями с отложенной загрузкой, Dependency Walker ничего не показал.
NT>Написал примитивную тестовую длл и тестовое приложение — результат тот же самый.
NT>Как человек не профильно программирующий на C++ вероятно я упустил какую то очевидную вещь.
NT>Надеюсь на помощь=)

Возможно проблема в том что во фрагменте кода длл нет в начале #include "stdafx.h".
Идея в том что он включает targetver.h. В файле "WinDef.h" нашел следующее.. правда для 2008 студии

#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define CALLBACK    __stdcall
#define WINAPI      __stdcall
#define WINAPIV     __cdecl
#define APIENTRY    WINAPI
#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall
#else
#define CALLBACK
#define WINAPI
#define WINAPIV
#define APIENTRY    WINAPI
#define APIPRIVATE
#define PASCAL      pascal
#endif


у меня по умолчанию конвенция вызова __cdecl.
Re: ERROR_INVALID_PARAMETER при LoadLibrary
От: dcb-BanDos Россия  
Дата: 21.10.11 10:56
Оценка:
Здравствуйте, nugaev.t, Вы писали:


NT>

NT>#include "stdafx.h"
NT>#include <Windows.h>


NT>int _tmain(int argc, _TCHAR* argv[])
NT>{
NT>    HMODULE hDll = LoadLibrary(L"C:\\Temp\\TestLib.dll");
NT>    int error = GetLastError();
NT>    return 0;
NT>}

NT>


Компилируется как юникод?
если нет, то юзай LoadLibraryW(L"libname...
или LoadLibraryA("libname...
Ничто не ограничивает полет мысли программиста так, как компилятор.
Re: ERROR_INVALID_PARAMETER при LoadLibrary
От: GrayWolf Россия https://kini24.ru
Дата: 21.10.11 14:37
Оценка:
А я один обратил внимание, что:
1) в dll отсутствует описание экспорта функции Test();
2) в основной программе нет указания на адрес функции в библиотеке.
Т.е. библиотеку мы загрузили через LoadLibrary(), а вот GetProcAddress() сделать забыли...
Прошу прощения, если неверно понял задачу, но сначала следует описать экспортируемую функцию в библиотеке (например, extern "C" bool STDCALL is2_Done() в библиотеке), затем LoadLibrary() + GetProcAddress() в основном приложении. И только затем вызов этой функции...
Re[2]: ERROR_INVALID_PARAMETER при LoadLibrary
От: okman Беларусь https://searchinform.ru/
Дата: 21.10.11 18:48
Оценка:
Здравствуйте, GrayWolf, Вы писали:

GW>А я один обратил внимание, что:

GW>1) в dll отсутствует описание экспорта функции Test();

Посмотрите первые сообщения темы.
Test не только объявлена "на экспорт" при помощи __declspec(dllexport), но ее имя
еще и в .def-файле прописано, что, вообще говоря, в этом случае необязательно.

GW>2) в основной программе нет указания на адрес функции в библиотеке.

GW>Т.е. библиотеку мы загрузили через LoadLibrary(), а вот GetProcAddress() сделать забыли...
GW>Прошу прощения, если неверно понял задачу, но сначала следует описать экспортируемую функцию в библиотеке (например, extern "C" bool STDCALL is2_Done() в библиотеке), затем LoadLibrary() + GetProcAddress() в основном приложении. И только затем вызов этой функции...

Проблема в том, что код обламывается еще на LoadLibrary, а до GetProcAddress дело вообще
не доходит, не говоря уже о вызове самой функции.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.