Спокойное развертывание DLL в Windows

У вас проблема с использованием malloc внутри функции char ** arrayOfWords(char *str,int max)

1> Для двойного указателя **s внутри функции char ** arrayOfWords(char *str,int max).

s=malloc(max*(sizeof(char *)+1));

это должно быть

s=malloc(max*sizeof(char *));

, потому что s - это указатель на массив указателей на символы.

2> Для каждого предмета внутри **s.

s[0]=malloc((sizeof(char *)*(size+1)));
s[count]=malloc((sizeof(char *)*(size+1)));

они должны быть

s[0]=malloc((sizeof(char)*(size+1));
s[count]=malloc((sizeof(char)*(size+1)));

, потому что s [i] теперь является указателем на массив символов.

5
задан Paul Baumer 15 May 2009 в 12:32
поделиться

5 ответов

Нет ли возможности выбрать статическое связывание с Qt?

Я бы развернул библиотеки DLL в том же каталоге, что и мое приложение / плагин.

Это не решает других ваших проблем.

0
ответ дан 14 December 2019 в 08:59
поделиться

Как сказал Тим, вы должны развернуть DLL в том же каталоге, что и приложение / плагин, которое вы создаете. Я считаю, что переменная PATH - не первое место, где ваша программа будет искать dll QT4, поэтому, если вы развернете ее в той же папке, ваше приложение выберет ту, что находится в вашем приложении, и проигнорирует все, что находится в PATH.

Q1: Раньше казалось, что все бросали свои библиотеки DLL в папку system32, потому что знали, что она находится в PATH, и знали, что программа сможет ее найти. С точки зрения пользователя мне очень трудно очистить, когда я хочу что-то удалить. А теперь, учитывая небольшую стоимость хранилища, я бы сказал, держите свои библиотеки DLL в своем приложении, особенно если они такие, где может быть несколько версий. Хотя я не эксперт, я так обрабатываю файлы jar для приложений Java.

Q2: Я так думаю. Это будет зависеть от структуры каталогов приложения и плагина. Вы можете указать своему плагину, какую версию использовать, и я готов поспорить, что приложение уже имеет свою версию в специальном месте.

С точки зрения, мне очень трудно убрать, когда я хочу что-то удалить. А теперь, учитывая небольшую стоимость хранилища, я бы сказал, держите свои библиотеки DLL в своем приложении, особенно если они такие, где может быть несколько версий. Хотя я не эксперт, я так обрабатываю файлы jar для приложений Java.

Q2: Я так думаю. Это будет зависеть от структуры каталогов приложения и плагина. Вы можете указать своему плагину, какую версию использовать, и я готов поспорить, что приложение уже имеет свою версию в специальном месте.

С точки зрения, мне очень трудно убрать, когда я хочу что-то удалить. А теперь, учитывая небольшую стоимость хранилища, я бы сказал, держите свои библиотеки DLL в своем приложении, особенно если они такие, где может быть несколько версий. Хотя я не эксперт, я так обрабатываю файлы jar для приложений Java.

Q2: Я так думаю. Это будет зависеть от структуры каталогов приложения и плагина. Вы можете указать своему плагину, какую версию использовать, и я готов поспорить, что приложение уже имеет свою версию в специальном месте.

Это будет зависеть от структуры каталогов приложения и плагина. Вы можете указать своему плагину, какую версию использовать, и я готов поспорить, что приложение уже имеет свою версию в специальном месте.

Это будет зависеть от структуры каталогов приложения и плагина. Вы можете указать своему плагину, какую версию использовать, и я готов поспорить, что приложение уже имеет свою версию в специальном месте.

0
ответ дан 14 December 2019 в 08:59
поделиться

A1: Лучшая практика: поместите DLL в каталог исполняемого файла. Сначала он будет искать загрузку DLL. Это обычная практика.

A2: Если каким-то образом приложение использует другую версию Qt и для модуля, который вы описываете, требуется более поздняя или конкретная версия, это может вызвать проблему (не работает, сбой и т. Д.).

При статическом связывании вам также придется рассмотреть лицензию ограничения Qt. LGPL работает до тех пор, пока библиотека динамически загружается во время выполнения и может быть отделена от приложения. Это применимо только в том случае, если вы не выпускаете исходный код и т. Д.

Кроме того, ваш установщик должен настроить доступ к этим файлам, чтобы они были защищены от перезаписи каким-либо другим мошенническим приложением.

3
ответ дан 14 December 2019 в 08:59
поделиться

В версиях Windows, начиная с XP (например, XP, 2003, Vista, 2008 и Win7), вы можете использовать параллельные сборки или Перенаправление DLL . В любом случае, по сути, вы включаете небольшой текстовый файл, который сообщает операционной системе, что вам нужно использовать конкретную версию библиотек DLL, которые вы включили в тот же каталог, что и исполняемый файл.

Они менее известны функции, но они действительно могут спасти вашу задницу от "ада DLL".

1
ответ дан 14 December 2019 в 08:59
поделиться

Просто чтобы помочь другим решить эту проблему: QT DLL гарантированно будут одинаковыми (или хотя бы бинарно совместимыми) для всех версий 4.X. (то же самое для всех версий 3.X и так далее), так что проблем не будет. Это также причина того, что в именах Qt dll нет второго числа.

3
ответ дан 14 December 2019 в 08:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: