Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46

Передача параметров в С-процедуру (DLL) из Delphi

01.08.2015, 16:25. Показов 1845. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в программе DELPHI описать параметры и функцию, которая находится в DLL, написанную на языке С, т.е. как сделать вызов внешней функции?

Описание функции в С
C
1
2
3
4
5
6
7
8
short WINAPI matize( const char* lpWord,
                              word16      dwSets,
                              char*       lpLemm,
                              word32*     lpLids,
                              char*       lpGram,
                              word16      ccLemm,
                              word16      cdwLid,
                              word16      cbGram );
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.08.2015, 16:25
Ответы с готовыми решениями:

Передача параметров из командной строки в процедуру Delphi
Интересует, собственно, вопрос, как сделать такую штуку. При старте программы вызывается командная строка с текстом, например: ...

Передача параметров в процедуру
Доброго времени суток. Нужна ваша помощь, знатоки! Возникла нужда в изучении процедур и передачи в них параметров. Но найти что да как...

Передача параметров в процедуру
В приложении динамически создается объект(не суть важно какой) для обработки события OnClick использую такой код: Private ...

18
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
02.08.2015, 21:23
Delphi
1
2
3
4
5
6
7
function matize(
  lpWord: PChar;
  dwSets: Word;
  lpLemm: PChar;
  lpLids: PULONG;
  lpGram: PChar;
  ccLemm, cdwLid, cbGram: Word): USHORT;  stdcall;
Но с PChar может быть засада. Следует выяснить какого размера Char ожидает либа.
0
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
03.08.2015, 09:27  [ТС]
Не совсем понял вот эту строку:
5 lpLids: PULONG;
Разве здесь не должно быть Pchar?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.08.2015, 09:45
word32* lpLids

Тип word32* дословно трактуется как "указатель на 32-битное слово"
0
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
05.08.2015, 07:42  [ТС]
Не все получается. Параметры Pchar передаются, а последние три - нет. Это выходные параметры, м.б. для них нужна дополнительная спецификация? Пробовал Var и Out.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2015, 11:43
Цитата Сообщение от vln1981 Посмотреть сообщение
последние три ..Это выходные параметры
Это с какого же перепугу они выходные ?
Были бы выходные - были бы объявлены как указатели (* после типа). И имена идентификаторов этих параметров начинались бы с lp.

Ну это при условии если прототип ф-ции писал вменяемый чел, в планы которого не входило запутать свою и чужие разведки)
0
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
05.08.2015, 14:14  [ТС]
Таково действие (назначение процедуры). Первые два параметра-входные, остальные - выходные (результаты).
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2015, 14:30
Где это написано ?
0
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
05.08.2015, 15:51  [ТС]
Вы правы- последние три параметра - входные, они задают длину выходных массивов lpLemm,
lpLids, lpGram.
Все дело в том, что я привык к динамической строке string в Delphi и поэтому ожидал, что длины массивов будут выходными параметрами.
Все равно непонятно, что делать с этими массивами. Если в параметрах задаю длину входной строки 100, как описать этот массив? делаю new(Lplemm), затем FillChar(Lplemm,100,' ');
это правильно?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2015, 16:09
А ты выяснил длину данных типа Char, которую ожидает либа ?
0
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
05.08.2015, 16:12  [ТС]
В описании функции написано:
"lpWord - указатель на строку в кодировке 1251 Windows Cyrillic;"
я понимаю так, что char - один байт.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2015, 16:13
а Делфи какой версии ?
0
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
05.08.2015, 16:17  [ТС]
Delphi 7, Windows XP
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2015, 16:22
тогда можно так

s: String;

SetLength(s, 100);
..

matize(..., PChar(s), ..., Length(s)..);
0
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
05.08.2015, 16:26  [ТС]
Pchar(S) для входного параметра(первый Pchar - входной) работает, а для выходных параметров - нет.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2015, 16:38
А какие выходные-то ?

Добавлено через 1 минуту
lpGram ?

разницы-то никакой - все точно так же, если ф-ция блокирующая
1
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
05.08.2015, 17:01  [ТС]
параметры 3,4,5 - lpLemm,
lpLids, lpGram.

Добавлено через 22 минуты
Цитата Сообщение от mss Посмотреть сообщение
разницы-то никакой - все точно так же, если ф-ция блокирующая
что такое - ф-ция блокирующая?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2015, 21:52
Лучший ответ Сообщение было отмечено vln1981 как решение

Решение

Цитата Сообщение от vln1981 Посмотреть сообщение
параметры 3,4,5 - lpLemm,
lpLids, lpGram
Ну для них по идее должно быть все точно так же как в примере #14

Цитата Сообщение от vln1981 Посмотреть сообщение
что такое - ф-ция блокирующая?
Не возвращающая управление до момента полного выполнения возложенных на нее "обязанностей"
1
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
06.08.2015, 18:55  [ТС]
Спасибо - все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.08.2015, 18:55
Помогаю со студенческими работами здесь

Передача параметров в процедуру
Здравствуйте! У меня есть процедура которая строит график по заданном диапазону Sub plot_graph() Dim c As ChartObject ...

Передача параметров в процедуру
Пока не нашел функцию ltoa, пытался добавить подсчет количества записанных байтов. Добавил параметр qcnt:DWORD, и выполнил действия...

Передача параметров в процедуру
Есть класс формы, я прописал процедуру для редактирования формы, но передать в нее "список" не могу. Выбивает ошибку : ...

Передача параметров в хранимую процедуру
ПРивет всем, ПОдскажите плз, хотел сделать универсальную процедуру на выборку, по нескольким параметрам, текст примерно такой ...

Не работает передача параметров в процедуру
Здравствуйте, уважаемые участники форума, В связи с изменениями на работе, пришлось перейти c delphi на с++. Со средой определился...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru