Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
1

Вызов функции в dll из формы или из GUI

13.05.2015, 16:52. Показов 1150. Ответов 19
Метки нет (Все метки)

Приветствую.
Есть форма, в ней объявлены 3 функции из длл. При старте формы происходит вызов одной из функций, при завершении - второй. Хотел, для уменьшения размера основной программы отказаться от формы и использовать apptype gui - но почему то вызов функции не происходит. Подскажите разницу между этими типами программы? И еще вопрос, одна из функций в dll должна знать 2 цифровых значения, но они могут изменяться. Поэтому при старте программы хочу передавать в функцию (в длл) 2 цифровых значения (во-первых, что бы жестко не прописывать их в коде длл, а во-вторых, что бы не грузить код длл лишней перепроверкой этих цифр при каждом последующем вызове функции). Подскажите, передача данных из программы в длл имеет тот же принцип как и внутри программы? Т.е.
Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
CallSomeFunctionInsideDLL(Number1, Number2);
end;
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2015, 16:52
Ответы с готовыми решениями:

Вызов функции или процедуры главного приложения с dll C#
Добрый день !!! :)Есть программа которая подключает плагины к себе, в одном из плагинов...

Вызов функции из dll. Dll не определена в коде и подключается программно
Я написал простую функцию которая возвращает негатив bitmap'а Function Negative(ByVal Bmp As...

Inject dll, а также вызов функции из этой же dll
Всем привет, заинжектить dll в другой процесс получилось, но еще необходимо вызвать функцию в этой...

Вызов функции DLL VB.NET в DLL C++
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?

19
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 17:10 2
Цитата Сообщение от pixel Посмотреть сообщение
передача данных из программы в длл имеет тот же принцип как и внутри программы
Смотря что ты называешь принципом..
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 17:31  [ТС] 3
если принцип один и тот же, то проблем с передачей данных между программой и функцией в длл не будет (не будут изковерканы передаваемые данные)
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 19:46 4
Принципов всякоразных существует великое множество, и все они имеют равное право на использование.

А коверканье передаваенмых данных если и происходит, то из-за несоблюдения единства того или иного выбранного принципа в передающем и принимающем данные программных кодах.

То бишь накосячить с передачей-приемом данных между вызывающим и вызываемым кодами при определенном умении можно и без DLL)
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 19:58  [ТС] 5
ясно. у меня одна проблема. я из проги пытаюсь передать 2 числа в длл, но почему то они то есть, то нет. как мне передать 2 числа в dll что бы они были доступны всем функциям в dll? ощущение такое, что какие то эти числа видят, а какие то нет.
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 20:01 6
Ключевое требование - декларированное соглашение о вызове в вызывающем и вызываемом кодах должно быть одинаковым.
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 20:08  [ТС] 7
если не сложно, можете дать просто пример в 5 строк как должна выглядеть правильная функция в DLL которая примет 2 цифровых параметра из программы и эти параметры будут видны всем функциям в DLL?
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 20:18 8
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
library MyLib
var
  n1, n2: Integer;
 
  procedure SetParams(Param1, Param2: Integer);
  begin
    n1 := Param1;
    n2 := Param2;
  end;
 
  function GetParam1: Integer;
  begin
    Result := n1;
  end;
  
  function GetParam2: Integer;
  begin
    Result := n2;
  end;
 
exports
  SetParams, GetParam1, GetParam2;
 
begin
end.
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 20:32  [ТС] 9
что то я не совсем понимаю. мне нужно из программы дать 2 числа в функцию в ДЛЛ и именно там должны эти цифры крутиться - они не должны возвращаться в программу. Кстати, а при данном использовании никакие stdcall не требуются?
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 20:39 10
Цитата Сообщение от pixel Посмотреть сообщение
они не должны возвращаться в программу
Не должны - не возвращай, никто ж не против)

Ты вопрос как поставил ?
параметры будут видны всем функциям в DLL
Ну вот функциям GetParam1 и GetParam2 как раз и видны параметры, переданные при вызове SetParams

Цитата Сообщение от pixel Посмотреть сообщение
никакие stdcall не требуются?
Не требуются.
Но если stdcall указан при объявлении ф-ции/процедуры в DLL, то он же должен быть указан и при объявлении соотв.прототипа в вызывающем их коде
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 20:43  [ТС] 11
вот смотрю я на ваш код - у меня все то же самое, на пойму тогда, почему в одном случае цифры есть, а в другом их нет. всю голову сломал уже.
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 20:46 12
знать случаи разные, раз в одном есть. а в другом нет)
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 21:10  [ТС] 13
сейчас попробую немного изменить процедуру и добавить один строковой параметр. посмотрю будет ли он виден.

Добавлено через 22 минуты
бред какой то. то есть данные то нет.
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 21:11 14
ну попробуй еще с бубном попрыгать
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 21:24  [ТС] 15
не смешно. если в длл прописывать жестко эти параметры - то все работает, а если их из проги передавать, то работает то нет. блинство. хотелось гибкости, а придется очередной велосипед изобретать.
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 21:29 16
не смешно
Кому как)

Добавлено через 2 минуты
Цитата Сообщение от pixel Посмотреть сообщение
добавить один строковой параметр
Ты когда новый проект DLL создавал, трехэтажный комментарий читал, который Делфи тебе любезно поместила в заготовку проекта ?
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 21:35  [ТС] 17
я не создавал, я старый пилю

Добавлено через 1 минуту
это не то. тем более если говорим про цифры
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 21:37 18
Цитата Сообщение от pixel Посмотреть сообщение
я не создавал
Ну так создай и прочитай его

Добавлено через 1 минуту
Цитата Сообщение от pixel Посмотреть сообщение
говорим про цифры
про какие такие "цифры" ?

Нет в Делфи данных типа "цифра" !
0
23 / 16 / 4
Регистрация: 19.05.2009
Сообщений: 2,036
13.05.2015, 21:39  [ТС] 19
еб тресь, ну число (Integer) - понятней стало?
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
13.05.2015, 21:53 20
Цитата Сообщение от pixel Посмотреть сообщение
ну число (Integer)
Число и цифра - две разные разницы)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2015, 21:53

Вызов из библиотеки (dll) формы (form)
Здравствуйте. Суть такая: пишу библиотеку для подключения к vba. На шарпе присоединить не вышло, на...

Вызов формы из dll подключенной через Assembly
День добрый, уважаемые. Подскажите, пожалуйста, как вызвать форму из dll, подключаемой через...

Вызов других форм из основной формы в DLL
Привет! вот какая у меня беда мне нужно написать ДЛЛку которая будет практически отдельныим...

Вызов программой, написанной на С++, функции из dll, написанной на Assembler (явное подключение dll)
Доброго времени суток!Задали лабораторную работу: программа, написанная на с++ должна подключать...


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

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

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