Народ! Я использую Wize for Windows Installer Professional 4.02. Надо мне сделать следующее — вызвать из DLL функцию, которая показывает юзверю страшное окошко, а потом DLL-ку мирно от него спрятать (короче не хочу ее ставить ему) . В Wize есть такая менюшка — Call DLL from Installation. Как я понял под это дело она и заточена. Заюзал ее — не пашет. DLL-ку не зовет. Что делать?
Здравствуйте, _Dinosaur, Вы писали:
_D>Здравствуйте, x2003, Вы писали:
_D>[]
_D>Опиши поподробней процесс создания DLL _D>- объявление функции _D>- тип Custom Action _D>- место, где вызывается Custom Action _D>и т.п.
DLL написана на C++Builder`e. Функция объявлена как
extern "C"
{
__declspec(dllexport) long MyFunction()
{
// Do something ...
return 55;
}
}
тип Custom Action
Call Custom DLL From Installation Files
Здравствуйте, _Dinosaur, Вы писали:
_D>Здравствуйте, x2003, Вы писали:
X>>extern "C" X>>{ X>> __declspec(dllexport) long MyFunction() X>> { X>> // Do something ... X>> return 55; X>> } X>>}
_D>Если я не ошибаюсь, то имя в будет задекорировано _D>экспорт лучше объявляй через .DEF файл
!!! Имя будет преобразовано в _MyFunction
X>>тип Custom Action X>>Call Custom DLL From Installation Files
_D>нормально
X>>Зову после Display Dialog Progress_Dialog X>>
_D>До ExecuteAction или после ?
После вроде ...
Здравствуйте, x2003, Вы писали:
X>!!! Имя будет преобразовано в _MyFunction
У меня VC7 не декорирует имя
в экспортной таблице находится MyFunction
посмотри свойства CustomAction
на корректность указания имени функции
и параметров запуска
_D>>До ExecuteAction или после ? X>После вроде ...
Прогони под дебагом, посмотри
какая инфа появляется после выполнения твоей CustomAction
(если вообще происходит попытка выполнения)
Завидую людям, которые могут себе позволить никуда не спешить.
Здравствуйте, _Dinosaur, Вы писали:
_D>Здравствуйте, x2003, Вы писали:
X>>!!! Имя будет преобразовано в _MyFunction
!!!!!!!( Если в настройках компилятора поставить GenerateUnderscores, то именно так все и будет).
Если компилировать VC, то MyFunction.
Когда у меня первая DLL не пошла я сделал еще одну на C++ Builder он создает _MyFunction
Я пыталься играть с именами — не помогает.
_D>У меня VC7 не декорирует имя _D>в экспортной таблице находится MyFunction _D>посмотри свойства CustomAction _D>на корректность указания имени функции _D>и параметров запуска
_D>>>До ExecuteAction или после ? X>>После вроде ...
_D>Прогони под дебагом, посмотри _D>какая инфа появляется после выполнения твоей CustomAction
Никакая. До выполнения полно каких-то данных. После — все зачищается. _D>(если вообще происходит попытка выполнения)
Попытка выполнения происходит. Вышибает окошко с текстом
Error 1723. There is a problem with Windows Installer Package. A DLL Required for this install could not be run.
Но DLL-ка существует.
Кроме указанной выше я пытался вызвать
Call custom DLL from destination
Call custom DLL from installation
Call custom DLL from installed files
результат тот же.
Глянь еще в
Installation Expert->Project Definition->Resources
есть ли там твоя DLL, из правильного ли пути берется,
стоит ли галочна на обновление ресурса при каждой компиляции
+
посмотри по Dependency Walker экспортную таблицу DLL
+
не возвращается ли FALSE в DllMain()
Завидую людям, которые могут себе позволить никуда не спешить.
Здравствуйте, _Dinosaur, Вы писали:
_D>Глянь еще в _D>Installation Expert->Project Definition->Resources _D>есть ли там твоя DLL, из правильного ли пути берется, _D>стоит ли галочна на обновление ресурса при каждой компиляции _D>+ _D>посмотри по Dependency Walker экспортную таблицу DLL _D>+ _D>не возвращается ли FALSE в DllMain()
Здравствуйте, x2003, Вы писали:
X>WiseCustomCall <Unspecified> странный размер X>и X>WiseCustomCalla путь к моей DLL и правильный размер
X>Что такое первый параметр ?
Первый параметр — Имя ресурса в таблице Binary
Ресурс обновляется каждый раз при компиляции?
Все ли необходимые для твоего модуля DLL присутствуют на компе?
Если ничего другое не помогает
попробуй удалить этот CustomAction
и создать снова
Завидую людям, которые могут себе позволить никуда не спешить.
Здравствуйте, _Dinosaur, Вы писали:
_D>Здравствуйте, x2003, Вы писали:
X>>WiseCustomCall <Unspecified> странный размер X>>и X>>WiseCustomCalla путь к моей DLL и правильный размер
X>>Что такое первый параметр ?
_D>Первый параметр — Имя ресурса в таблице Binary
WiseCustomCall <Unspecified> странный размер — задает имя ресурса в таблице Binary?
Я попробовал убивать и создавать такие action — картина таже.
Напротив WiseCustomCall галочка refresh не стоит
Напротив WiseCustomCalla галочка refresh стоит
DLL — ка чистая. Максимум что может кроме себя просить vcl50.dll.
На моей машине стоит и Builder и Visual Studio.