Re[5]: Реализация отложенной загрузки библиотек на С++
От:
Аноним
Дата:
15.01.08 07:03
Оценка:
Здравствуйте, Andrew S
У меня возник вопрос. Возможно я что-то неправильно поняла, но когда я использую вашу библиотеку, вызываю функцию из dll, которая возвращает значение типа int, то не получаю ничего кроме null. Что не так я делаю и как мне реализовать возможность обмена данными с моей dll?
Re[6]: Реализация отложенной загрузки библиотек на С++
А>У меня возник вопрос. Возможно я что-то неправильно поняла, но когда я использую вашу библиотеку, вызываю функцию из dll, которая возвращает значение типа int, то не получаю ничего кроме null. Что не так я делаю и как мне реализовать возможность обмена данными с моей dll?
"Стучит где-то в машинном отделении"
Неплохо было бы пример кода. Ну и библиотеку посоветую взять по этой ссылке — она там иногда обновляется, в отличие от той, что вместе со статьей
PS
Да, к слову о формулировке вопроса. Функция, возвращающая int, значение null возвращать ну никак не может. 0 — другое дело.
Здравствуйте, Andrew S, Вы писали:
AS>"Стучит где-то в машинном отделении" AS>Неплохо было бы пример кода. Ну и библиотеку посоветую взять по этой ссылке — она там иногда обновляется, в отличие от той, что вместе со статьей
В коде особо не мудрствовала, просто захотелось проверить использование вашей библиотеки, ну например
Функция в Dll
int SampleFunction(bool tmp)
{
if(tmp){
::MessageBox(0,"Флаг получил значение true","Сообщение о загрузке Dll",MB_OK);
return 1;
}
else{
::MessageBox(0,"Флаг получил значение false","Сообщение о загрузке Dll",MB_OK);
return 2;
}
}
Все прекрасно собирается, но увы не с тем результатом....
AS>PS AS>Да, к слову о формулировке вопроса. Функция, возвращающая int, значение null возвращать ну никак не может. 0 — другое дело.
Извените, просто небольшой сленг.
Re[8]: Реализация отложенной загрузки библиотек на С++
Кстати, попробывала подгрузить свою dll в ваш пример в консольки, dll грузит, но опять же от функций ничего не приходит, наверняка я что-то недопонимаю , спасибо если поможете разобраться
Re[8]: Реализация отложенной загрузки библиотек на С++
VL>Кстати, попробывала подгрузить свою dll в ваш пример в консольки, dll грузит, но опять же от функций ничего не приходит, наверняка я что-то недопонимаю , спасибо если поможете разобраться
Вдогонку — посмотрите depends'ом экспортируемые из dll функции. Наверняка у вас манглинг, поскольку нет def файла.
Добрый день,
Случилось так, что мне нужно импортировать из DLL функцию с 21-м параметром + еще возвращаемое значение.
сейчас компилятор (VS 2005 SP1) выдает следующее:
.cpp(35) : error C2039: 'CFunProxy__stdcall17' : is not a member of 'delayload'
.cpp(35) : error C2144: syntax error : 'char' should be preceded by ')'
.cpp(35) : error C3861: 'CFunProxy__stdcall17': identifier not found
.cpp(35) : error C2144: syntax error : 'char' should be preceded by ')'
.cpp(35) : error C3861: 'DL_SEQ_ENUM_DL_N_DL_SEQ_SIZE_17': identifier not found
.cpp(35) : error C2059: syntax error : ')'
.cpp(35) : error C2947: expecting '>' to terminate template-argument-list, found '>'
.cpp(35) : error C2976: 'delayload::CDynFunction' : too few template arguments
Что нужно дописать в программе, что бы можно было импортировать такие функции ?
Там оно изредка обновляется, да и в целом — для Вашей задачи никаких обновлений не требуется, просто определить макрос, дабы использовался буст (DL_USE_BOOST_PP).
Кроме того, есть мысль, что функция с числом параметров более 4-х есть пример плохого проектирования. 21 параметр — имхо, жесть.
Здравствуйте, Andrew S, Вы писали:
AS>Рекомендую брать библиотеку отсюда: http://files.rsdn.ru/8583/delayimphlp.zip
Так я оттуда и брал!
AS>Там оно изредка обновляется, да и в целом — для Вашей задачи никаких обновлений не требуется, просто определить макрос, дабы использовался буст (DL_USE_BOOST_PP).
Я бы рад, но проект небольшой и пристегнув к нему boost получится этакий диплодок
Хотя может и правда стоит
AS>Кроме того, есть мысль, что функция с числом параметров более 4-х есть пример плохого проектирования. 21 параметр — имхо, жесть.
А кто говорит что хорошее проектирование. Но делать нечего т.к. библиотечка сторонняя и сделать с ней я ничего не могу
Ну, значит, все в порядке
AS>>Там оно изредка обновляется, да и в целом — для Вашей задачи никаких обновлений не требуется, просто определить макрос, дабы использовался буст (DL_USE_BOOST_PP). O>Я бы рад, но проект небольшой и пристегнув к нему boost получится этакий диплодок O>Хотя может и правда стоит
Можно выдрать из буста::препроцессор только нужные куски — их там немного (последовательности и итерации по ним + несколько мелких кейсов).
Впрочем, тут дело ваше — главное, чтобы в результате все работало.
AS>>Кроме того, есть мысль, что функция с числом параметров более 4-х есть пример плохого проектирования. 21 параметр — имхо, жесть. O>А кто говорит что хорошее проектирование. Но делать нечего т.к. библиотечка сторонняя и сделать с ней я ничего не могу
Ну, при желании сделать можно. Например, прокси-библиотеку, которая линкует указанного монстра статически и заворачивает его апи в более культурный, а остальное просто "пробрасывает". Ну да это перебор, наверное. В общем, удачи.