Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2021, 14:13   #1
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию Delphi, Си, .dll и непонятный глюк.

Интересная история.
Несколько дней балуюсь созданием .dll на Си, и скармливанием их Delphi. В Delphi написал прогу, где всякие function( ... ).... cdecl; external '... .dll';
Разные IDE для Си пробовал ( в Си я не очень.. ) - Code::Blocks, DevC++, geany, VS Community,VS Express, PellesC .
И вот, удалил (с помощью Revo ) Visual Studio Community и Visual Studio Express , а вместе с ними Visual c++ redistributable ( не знаю зачем, видимо чисто по названию ).
После этого дельфийская прога перестала запускаться , пишет "Запуск программы невозможен, так как на компьютере отсутствует vcruntime140.dll. Попробуйте переустановить программу."
Сама Delphi работает, другие проги от нее все ОК. И даже эта прога для .dll заработала, когда удалил из неё вызов функций.dll , созданных именно Visual Studio Экспресс или Комюнити.
Вызовы dll.-функций от других IDE работают. Интересно, ведь сами файлы .dll - с ними ничего не менялось. Возможно, что-то от Delphi оторвалось, и она так стала реагировать на длл именно от Visual Studio.
Советы из инета по поводу vcruntime140.dll не помогли . Скачивал-устанавливал Visual c++ redistributable, подсовывал vcruntime140.dll в папку Дельфы/Bin , все то же.
Неохота Дельфы переустанавливать , не уверен что поможет. Да и проблема невелика, длл другими IDE вроде можно.
Просто интересно.
type_Oleg вне форума Ответить с цитированием
Старый 08.11.2021, 14:22   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

vcruntime - это значит вы собирали в студии с динамической линковкой. Если у вас dll собрана так, то для ее загрузки и использования нужна будет vcruntime140.

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Скачивал-устанавливал Visual c++ redistributable
Нужной разрядност/версии?

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
подсовывал vcruntime140.dll в папку Дельфы/Bin
Если и подсовывать, то к требующей dll.
ForenLi вне форума Ответить с цитированием
Старый 08.11.2021, 14:57   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Нужной разрядност/версии?
Обеих, ибо комп и ОС у меня 64, а Дельфы старая - 7.

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Если и подсовывать, то к требующей dll.
В смысле - в папку с .exe той моей проги для .dll ? Но её же там не было . Вроде, не проверял, там только исходники, файлы проекта.

PS Посмотрел, где кроме System32 и SysWOW64 еще живет этот vcruntime140. Смотрел в Program Files и Program Files(x86).
Оказалось - в Arduino, AVAST, Mozilla Firefox, Stellarium. Причем разных размеров и времен.

PPS Кстати, файл vcruntime140.dll из папки C:\Program Files (x86)\Borland\Delphi7\Bin чудесным образом исчез ! Когда, я и не понял. Я его точно туда копировал из Windows\System32, я проверял. Вставлять пришлось с правами админа.
Снова копировать туда не стал.
type_Oleg вне форума Ответить с цитированием
Старый 08.11.2021, 15:04   #4
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Обеих, ибо комп и ОС у меня 64, а Дельфы старая - 7.
Без разницы. Должно совпадать с разрядностью dll.

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
S Посмотрел, где кроме System32 и SysWOW64 еще живет этот vcruntime140.
Если установлен редистриб.

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Оказалось - в Arduino, AVAST, Mozilla Firefox, Stellarium. Причем разных размеров и времен.
И в еще куче других приложений. Естественно, размер зависит от разрядности/версии/...

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Я его точно туда копировал из Windows\System32, я проверял.
К 32битной Delphi копировали 64битную либу? Зачем?
ForenLi вне форума Ответить с цитированием
Старый 08.11.2021, 15:20   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
К 32битной Delphi копировали 64битную либу? Зачем?
А .. да. Меня ввели в заблуждение названия папок. Там же все наоборот.

Скопировал из WOW64, ничего не изменилось.

Последний раз редактировалось type_Oleg; 08.11.2021 в 15:26.
type_Oleg вне форума Ответить с цитированием
Старый 09.11.2021, 21:01   #6
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

я бы заморочился и поставил всё в том порядке, как ставил на комп в первый раз.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 10.11.2021, 12:12   #7
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Вы хотя бы проблемную dll выложили, а то разговор о коне в вакууме.
ForenLi вне форума Ответить с цитированием
Старый 10.11.2021, 15:18   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Вы хотя бы проблемную dll выложили, а то разговор о коне в вакууме.
Которую ? Ту, которую ищет моя программа на Дельфы - vcruntime140.dll ? Так я не знаю какую из них, где она её ищет.
Или те, что создавал в Си, в VS ?
А что можно увидеть в .dll, это же что-то вроде .exe, там исполняемый код.

Вот, так я описывал функции вызова .dll в Delphi:
Код:
// wxDev-C++
procedure Hello_wxDevCpp; cdecl; external PATH_DLL_C+'cpp_dll.dll';  // OK
function funWx01(k:Integer):Double; cdecl; external PATH_DLL_C+'fun_dll_C.dll';  // OK
// Visual Studio Communiti 
function funVisStu(a:Integer):Integer; cdecl; external PATH_DLL_C+'dll3.dll'; // до удаления VS - OK, после удаления - глюк
Вот сами dll

И в самом деле, в dll3 ( от VS) есть про vcruntime140, но с буквой D
Вложения
Тип файла: rar dll.rar (36.9 Кб, 3 просмотров)

Последний раз редактировалось type_Oleg; 10.11.2021 в 15:39.
type_Oleg вне форума Ответить с цитированием
Старый 10.11.2021, 15:46   #9
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
И в самом деле, в dll3 ( от VS) есть про vcruntime140, но с буквой D
Именно, вы собрали дебаг версию dll с дин. линковкой. Вам нужна vcruntime140d.dll
ForenLi вне форума Ответить с цитированием
Старый 10.11.2021, 15:55   #10
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Именно, вы собрали дебаг версию dll с дин. линковкой. Вам нужна vcruntime140d.dll
А .. точно. Я помню, VS создавал папку Debug, куда помещал результаты компиляции.

А vcruntime140D.dll на компе нет, я проверил сейчас.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный глюк textarea, помогите. Voron20085 HTML и CSS 1 28.03.2014 10:13
Непонятный глюк luk18 Microsoft Office Excel 3 01.09.2011 12:50
Экспорт в Excel, непонятный глюк. Kolik317 Общие вопросы Delphi 1 31.10.2010 19:24
Непонятный глюк с отображением прогресбара Oooleg Microsoft Office Excel 7 25.02.2010 19:15
Непонятный глюк Delphi 2009 aesoem Общие вопросы Delphi 3 15.08.2009 12:30