Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.65/23: Рейтинг темы: голосов - 23, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 41
1

Использование dll в программах

15.09.2018, 17:56. Показов 4280. Ответов 26
Метки нет (Все метки)

приветствую! у меня есть проблема : я не знаю как использовать dll.
есть вот такая dll :
Pascal
1
2
3
4
5
6
7
8
Library NotActivation;
procedure WriteText();
begin 
Write('Program not activ');
end;
begin 
 
end.
но когда я пишу
Pascal
1
NotActivation.NotActivation.WriteText();
у меня получается такая ошибка :
"Ошибка времени выполнения: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку "NotActivation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Не удается найти указанный файл."
что мне делать? я накостячил с синтаксисом самой dllки или я её не правильно использую?Заранее спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2018, 17:56
Ответы с готовыми решениями:

Использование записей для обработки разнотипной информации , работа с файлами в Паскаль - программах
Помогите пожалуста,я написал програму но проблема - она создает текстовий файл не такой как...

Использование функций в программах
Помогите решить задачу. Дано натуральное число n. Выяснить, можно ли представить его в виде...

Использование процедур в программах
Помогите решить практику, куча долгов до конца месяца, буду очень признателен Написать...

Использование подпрограмм-функций в программах
Написать функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде одного...

26
1815 / 1014 / 415
Регистрация: 07.04.2017
Сообщений: 3,900
15.09.2018, 18:30 2
Скорее всего это баг компилятора. По крайней мере ошибка неправильная, такой ошибки не должно возникать.
Скиньте все файлы вместе архивом.
1
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 41
15.09.2018, 18:40  [ТС] 3
Вот архив
Вложения
Тип файла: rar Program.rar (1.29 Мб, 2 просмотров)
0
3388 / 1808 / 487
Регистрация: 28.02.2015
Сообщений: 3,678
15.09.2018, 18:50 4
Лучший ответ Сообщение было отмечено SilverRisorov как решение

Решение

Цитата Сообщение от SilverRisorov Посмотреть сообщение
накостячил с синтаксисом самой dllки или я её не правильно использую?
Скорее второе
Библиотеку(слева) просто компилируем, а программу(справа) просто запускаем.
Миниатюры
Использование dll в программах  
1
1815 / 1014 / 415
Регистрация: 07.04.2017
Сообщений: 3,900
15.09.2018, 19:13 5
Лучший ответ Сообщение было отмечено SilverRisorov как решение

Решение

Да, понятно, паскаль глючно подключает библиотеку если она в другой папке.
Сейчас сделаю багрепорт, а пока не исправят - скопируйте библиотеку в папку с вашей программой. Даже менять путь в $reference не надо, просто не забывайте копировать библиотеку, чтоб в папке с программой и в папке по указанному пути всегда были одинаковые версии .dll .

Добавлено через 1 минуту
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Скорее второе
В примере который вы привели - библиотека и программа вроде в 1 папке, поэтому нет ошибки.

Добавлено через 12 минут
#1188
1
3388 / 1808 / 487
Регистрация: 28.02.2015
Сообщений: 3,678
15.09.2018, 19:53 6
Цитата Сообщение от Sun Serega Посмотреть сообщение
Да, понятно, паскаль глючно подключает библиотеку если она в другой папке.
Это не баг, когда паскаль подключает внешние файлы, он должен знать где их искать.
Начиная с DOS всегда была "Переменная окружения"=PATH, где указывают пути к папкам, где нужно искать.
1
Соколиный глаз
15.09.2018, 20:37
  #7

Не по теме:

Constantin Cat, просто бывает у людей желание придираться к компилятору до самого не могу, по поводу и без. :)

0
1815 / 1014 / 415
Регистрация: 07.04.2017
Сообщений: 3,900
15.09.2018, 20:57 8
Лучший ответ Сообщение было отмечено SilverRisorov как решение

Решение

Цитата Сообщение от Constantin Cat Посмотреть сообщение
Это не баг, когда паскаль подключает внешние файлы, он должен знать где их искать.
Путь указан, он знает где искать. Это не C++, чтоб надо было вручную писать пути ко всем папкам, где искать .dll . Компилятор может справится с этим.

Но, тем не менее разработчик ответил:
А кто Вам сказал, что в reference можно указывать полный путь? В C# например все подключенные dll копируются в место exe файла
Это ещё не означает ничего на 100%, но пока вопрос не решён - SilverRisorov, подключайте библиотеки только из папки с основной программой.

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
бывает у людей желание придираться к компилятору
Кто бы говорил))
Но, в данном случае это очень даже по делу, по крайней мере ошибка однозначно неправильная, надо чтоб на этапе компиляции выдавалась ошибка и с нормальным описанием.
1
3388 / 1808 / 487
Регистрация: 28.02.2015
Сообщений: 3,678
15.09.2018, 21:34 9
Лучший ответ Сообщение было отмечено SilverRisorov как решение

Решение

Цитата Сообщение от Sun Serega Посмотреть сообщение
А кто Вам сказал, что в reference можно указывать полный путь? В C# например все подключенные dll копируются в место exe файла
Одним словом Вам сказали "Давай - до свидания", типа читай мануаоы.
{$reference <имя файла>} - подключение библиотеки.
О пути, к файлу тут нет ничего.

C# это не РАВС.net.

К примеру в асме я всегда пишу include/includelib <диск;полный путь/имя файла> и все работает.
В архиве, который выложил ТС, путь прописан не полностью
Pascal
1
{$reference GameResurse\DynamicLibrary\NotActivation.dll}
Добавлено через 16 минут
сейчас проверил с полным путем(программа в d:\cat\my)
Pascal
1
2
3
4
{$reference d:\cat\NotActivation.dll}
begin
  NotActivation.WriteText();
end.
Если там нет DLL - пишет, что не найдена
Если есть -
Ошибка времени выполнения: System.IO.FileNotFoundException: Could not load file or assembly 'NotActivation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Стек:
at Program1.Program.$Main()
at Program1.Program.Main()
Т.е. компилятор её там ищет, а находит, так рукожопо загрузить не может.
2
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
15.09.2018, 22:25 10
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Т.е. компилятор её там ищет, а находит, так рукожопо загрузить не может.
Еще раз подтверждение того, что компилятор г**но.
1
1815 / 1014 / 415
Регистрация: 07.04.2017
Сообщений: 3,900
15.09.2018, 23:33 11
Цитата Сообщение от Constantin Cat Посмотреть сообщение
компилятор её там ищет, а находит, так рукожопо загрузить не может
Это не компилятор а .Net . Похоже, когда добавляешь библиотеку при сборке - добавляет имя файла без пути. Никто такое не пробовал - вот и не заметили. У меня лично файлы всех исходников всегда в 1 папке держу))
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
16.09.2018, 00:42 12
Sun Serega, похоже? А доказательства?
0
1815 / 1014 / 415
Регистрация: 07.04.2017
Сообщений: 3,900
16.09.2018, 01:24 13
В декомпиляторе имя показывало так. Нигде не было видно путь, видно было только название файла.
Я использую DotPeek, интересно - сами посмотрите, там всё интуитивно.
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
16.09.2018, 09:21 14
Sun Serega, принимается.
0
Эксперт .NET
7788 / 5252 / 1251
Регистрация: 25.05.2015
Сообщений: 16,019
Записей в блоге: 14
16.09.2018, 09:35 15
В C# можно создать домен и указать ему пути, где он будет сам искать библиотеки.
Или подключить текущему домену обработчик события AssemblyResolve, для ручной загрузки библиотеки.
2
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 41
16.09.2018, 17:12  [ТС] 16
спасибо вам всем за ответы. Моя библиотека действительно находилась в подпапке(GameResource\DynamicLibrary). Я думал что когда пишу $reference то потом можно указать путь к библиотеке (Типо $reference GameResoure\DynamicLibrary\LibName.dll).
Видимо так делать нельзя. Я поместил библиотеку в папку с *.exe файлом и всё заработало
0
3388 / 1808 / 487
Регистрация: 28.02.2015
Сообщений: 3,678
16.09.2018, 17:15 17
Sun Serega, Эти рукожопые, даже даже не могут проверить переменную окружения. Специально добавил путь.
Имеем.
Таким образом, если мне нужно написать программу с использованием системных библиотек, которые есть постоянно в системе в папке %windir%\system32\ мне нужно специально эти библиотеки копировать в папку с программой.
Миниатюры
Использование dll в программах   Использование dll в программах  
1
3388 / 1808 / 487
Регистрация: 28.02.2015
Сообщений: 3,678
16.09.2018, 17:18 18
SilverRisorov, Это не Ваша вина, а рукожопых. Соколиный глаз, ЩАЗ радуется "я говорил, я говорил".
2
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 41
16.09.2018, 17:22  [ТС] 19
Я просто думал что библиотеки из другой папки можно подключать и поэтому я решил создать отдельную папку с библиотеками(я часто вижу такое в других программах) дабы не загадить папку с программой,ведь я по каким-то причинам не могу отключить запись Debug информации (после первой же компиляции он опять включает эту функцию) + *.pas файлы + *.dll файлы + *.pdb файлы. Так ведь потом то что нужно не найдёшь!
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
16.09.2018, 17:25 20
Constantin Cat, Вы не поверите насколько. Просто праздник.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2018, 17:25

Использование подпрограмм-функций в программах
Написать функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде одного...

Использование указателей в программах
Тема: «Использование указателей в программах» №5.2 Составить программу, которая вычисляет...

Использование указателей в программах
Прошу составить программу на с++ 1)Составить программу для подсчёта количества положительных...

Использование подпрограмм-функций в программах
Помогите составить программу и по возможности блок-схему к моему заданию по примеру. задание и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru