Здравствуйте, 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 студии
А я один обратил внимание, что:
1) в dll отсутствует описание экспорта функции Test();
2) в основной программе нет указания на адрес функции в библиотеке.
Т.е. библиотеку мы загрузили через LoadLibrary(), а вот GetProcAddress() сделать забыли...
Прошу прощения, если неверно понял задачу, но сначала следует описать экспортируемую функцию в библиотеке (например, extern "C" bool STDCALL is2_Done() в библиотеке), затем LoadLibrary() + GetProcAddress() в основном приложении. И только затем вызов этой функции...
Здравствуйте, 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 дело вообще
не доходит, не говоря уже о вызове самой функции.