Я использую InstallShield 2013 Premium. Я создал C++ dll в Visual Studio 2010, чтобы предоставить некоторую функциональность, которую я не смог достичь с помощью InstallScript. Моя функция C++ должна вернуть маленькую строку (имя пользователя) в InstallScript после выполнения значительной работы, чтобы получить это значение.Как вернуть строку unicode/wstring/CStringW из dll C++ в InstallScript?
На протяжении всего C++ я использую CStringW для представления своих строк. В идеале я хотел бы вернуть его как Unicode, но я доволен ANSI, если это мой единственный вариант. Я пробовал множество подходов с CStringW, std :: wstring, std :: string, LPCTSTR, LPSTR, char * ... Я попробовал прямые возвращения и попытался вернуться по ссылке. Ничего не работает!
Иногда функция dll зависает, иногда она генерирует исключение, в лучшем случае возвращает значения мусора с непечатаемыми символами. Официальная документация по этому вопросу не кажется точным (это не работает для меня!). Обширный поиск в Google и поиск платформ Flexera производят «решения» от других, которые борются с той же смешной проблемой, и все же не из тех, которые работают для меня либо ...
Я не пробовал это до конца, что вы можете передавать строки между dll и InstallScript достаточно легко. Оглядываясь назад, я должен был начать с интерфейса между двумя, а затем разработал функциональность dll после этого.
соглашение о вызове вашей функции является STDCALL? – fassl
Вы можете начать с создания фиктивного приложения, которое использует вашу функцию '.dll'. Также убедитесь, что ваш '.dll' соответствует соглашениям, которые устанавливает InstallShield. – CristiFati