Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260

Правильно вызвать API функцию из библиотек на C

10.09.2014, 16:32. Показов 2400. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Скажите пожалуйста, я вызываю ряд функций API из библиотек на C.

C#
1
2
3
4
5
6
[DllImport("CtApi.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        public static extern bool ctClientDestroy(IntPtr hCTAPI);
 
        [DllImport("CtApi.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        public static extern UInt32 ctCicode(IntPtr hCTAPI, string sCmd, UInt32 hWin, UInt32 nMode, [MarshalAs(UnmanagedType.LPArray, SizeConst = 10, ArraySubType = UnmanagedType.I2)]
        char[] sResult, UInt32 dwLength, IntPtr pctOverlapped);
К некоторым функциям (которые возвращают значение) я применяю Marshall.
К тем которые что то передают или вообще не имеют параметров я оставил как есть.
Правильно ли я делаю?
Или к каждой функции нужно применять маршаллинг?

C#
1
CallingConvention.StdCall
- на что влияют параметры CallingConvention? В данном случае Std Call ?

Буду очень благодарен за помощь! Спасибо! )
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2014, 16:32
Ответы с готовыми решениями:

Как правильно вызвать API-функцию из C#?
извините за быть может ламерский вопрос. есть функция, как ее правильно вызвать на C#? Вообще, кто-нибудь работал с WFAPI (Citrix) из...

Как правильно вызвать эту функцию по клику? (bitcoin api)
Ребят, приветствую. Очень часто бороздил по этому форуму, но только в режиме "read only". Так все ответы на мои вопросы находил и так....

Как правильно передать вектор в функцию и вызвать эту функцию?
Здравствуйте, объясните как исправить ошибку. Возникает после for(), выдается, что размер polygon = 0. Вот так функции объявлены в классе: ...

4
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
10.09.2014, 16:37
Цитата Сообщение от romasimeiz Посмотреть сообщение
на что влияют параметры CallingConvention? В данном случае Std Call ?
Порядок чтения входных переменных, в том числе в стеке.

И кто восстанавливает стек.
0
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
10.09.2014, 16:41  [ТС]
Khludenkov, Если честно, слабо разбираюсь в физике процесса.
А если я буду менять эти параметры и запускать программу заново, кардинально может что то поменяться, возникнуть ошибки и т.д.
Т.е. вопрос чисто прикладной.
Спасибо!
0
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
11.09.2014, 08:10
Почитайте в гугле "соглашение (или конвенция) о вызовах.

Пример:

Некая функция из dll на си, например foo(int a, int b), принимает параметры в стиле "си", т.е. прямом порядке.
Вы её вызвали из паскаля, где порядок параметров (могу ошибаться, проверьте по справочнику) обратный.

Т.е. вы послали a = 10, b = 20. А функции пришло a = 20, b = 10.

И со стеком то же самое.

При выходе из подпрограммы на си она сама восстанавливает стек. И когда управление возвращается в основную программу, она ещё раз восстанавливает уже рабочий стек. Т.е. крах стека.

P.S. Может где напутал, подробнее смотрите справочники.
1
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
11.09.2014, 10:35
Вот тут, на этом же форуме отличный материал с примерами который мне помог в такой же проблеме. https://www.cyberforum.ru/csha... ost1913414
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2014, 10:35
Помогаю со студенческими работами здесь

Функции API CreateDesktop и CreateProcess - как их правильно вызвать?
Помогите с вызовом функции. Что не так? Например CreateProcess. Меняю стандартное объявление функции как: Private Declare Function...

Как правильно вызвать функцию
Здравствуйте. Как вызвать эту функцию в консоли Steel Bank Common Lisp? (defun SORT1(LST) ; по возрастанию (COND ...

Как правильно вызвать функцию?
Добрый день! У меня есть функция с таким кодом: private void dataGridView1_CellContentClick(object sender,...

Как правильно вызвать функцию?
Вопрос как правильно сделать вызов из mainLoop функцию comlastLogin через sortlastLogin. Если напрямую вызывать из mainLoop функцию...

Как правильно вызвать функцию?
как вызвать функцию? int sum_last(list_ptr a) { list_ptr ptr; assert(NULL != a); assert(NULL != a->next); for (ptr = a;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
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 и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru