Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как использовать API функции в проекте C++ CLR Windows Form?

09.01.2017, 20:04. Показов 6083. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Где объявлять API-функции в проекте, созданном по шаблону C++ -> CLR -> Windows Form и как?
Например в C# стразу после имени класса:
C#
1
2
3
4
5
6
7
8
public partial class Form1 : Form
    {
        [DllImport("user32.dll", EntryPoint = "GetDC")]
        public static extern IntPtr GetDC(IntPtr hWnd);
 
        [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
        public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2017, 20:04
Ответы с готовыми решениями:

Создать win form, используя шаблон windows form в clr, однако такого шаблона на моей студии 2013 нет
есть необходимость создать win form используя шаблон windows form в clr, однако такого шаблона на моей студии 2013 не обнаружено ... :(

Как использовать [ValidateAntiForgeryToken] в проекте API?
У меня есть проект API, к которому я прикрутил авторизацию: ")] public class AccountController : Controller { ...

Как запустить .cpp в проекте Windows Form?
Всем доброго времени суток! Помогите, пожалуйста, решить проблему - работаю в Visual Studio 2010. Создала пустой проект, написала...

12
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18296 / 14220 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
09.01.2017, 20:40
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, они уже объявлены в заголовочных файлах Windows SDK. Нужно написать #include и указать в настройках linker библиотеку в которой эта функция определена. Информация о имени заголовочного файла и библиотеки есть в MSDN: GetDC, ReleaseDC.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
10.01.2017, 17:11  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Нужно написать #include
как называется файл в котром писать #include "user32.dll" и где в нём это сделать, если можно приведите кусочек кода
Цитата Сообщение от OwenGlendower Посмотреть сообщение
указать в настройках linker библиотеку
что это и как найти настройки linker?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18296 / 14220 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
10.01.2017, 17:34
jkrnd, в #include указываются заголовочные файлы (обычно они имеют расширение .h), а не библиотеки. Указываем мы #include в начале того файлы где нам нужны символы из включаемого файла. Для проектов созданных в VS также можно указать #include один раз для всего проекта в файле stdafx.h.

Настройки компоновщика можно изменить в свойствах проекта. Названия .lib файлов указываются в поле Linker \ Inout \ Additional Dependencies.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
10.01.2017, 18:23  [ТС]
OwenGlendower, добавил
C++
1
2
3
4
5
6
7
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
#pragma once
#include "Windows.h"
#include "Winuser.h"
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
Добавил в заголовочные файлы C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\Windows.h и
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinUser.h.
Зашёл в свойства проекта -> Компоновщик -> Ввод -> Дополнительные зависимости
что дальше делать не пойму
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18296 / 14220 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
10.01.2017, 18:31
Цитата Сообщение от jkrnd Посмотреть сообщение
Добавил в заголовочные файлы C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\Windows.h и
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinUser.h
Без полных путей я надеюсь?
C++
1
2
#include <Windows.h>
#include <Winuser.h>
Winuser.h кстати явно включать не нужно. Он включается автоматически при включении windows.h

Цитата Сообщение от jkrnd Посмотреть сообщение
Зашёл в свойства проекта -> Компоновщик -> Ввод -> Дополнительные зависимости
что дальше делать не пойму
Нужно указать имя *.lib файла где находятся функции которые ты хочешт использовать. Если файлоа несколько, то имена нужно разделить точкой с запятой.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
10.01.2017, 21:28  [ТС]
OwenGlendower, ну вот, теперь компилятор кажется не ругается на GetDC. Осталось проверить работу функции.
C++
1
IntPtr hDC = GetDC(this->Handle);
вызывает исключение: Ошибка 1 error C2664: GetDC: невозможно преобразовать параметр 1 из "System::IntPtr" в "HWND" e:\jura\c++proj\apidrawing\apidrawing\ap idrawing\Form1.h 80 1 APIDrawing
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18296 / 14220 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
10.01.2017, 21:59
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, смотрим на сигнатуру метода GetDC:
C++
1
2
3
HDC GetDC(
  _In_ HWND hWnd
);
Видим ли мы там тип IntPtr? Нет. И не увидим т.к. IntPtr это тип из мира .NET. В мире Windows API свои типы. Соответственно нужно будет делать преобразования типов
C++
1
2
HDC hdc = GetDC((HWND)this->Handle.ToInt32());
IntPtr^ p = gcnew IntPtr(hdc);
P.S. Зачем ты переключился на С++/CLI? Чем C#/VB.NET не устраивает?
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
11.01.2017, 04:07  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Зачем ты переключился на С++/CLI? Чем C#/VB.NET не устраивает?
Вообще ближе всех мне VB. Хочу решить вопрос по рисованию с помощью функций API. Причём с прорисовкой в памяти и последующим выводом в окно (AutoRedraw). На VB ответа нет, только спрашивают зачем тебе это надо. Сделал пример на C#. Здесь чуть больше информации, но до конца докопаться не могу. Помог выход на форум C++ API, но ответивший мне человек не работает в VS, помог мне продвинутся в решении вопроса дальше всего. Решил переделать пример на C++ в надежде получить всё-таки ответ на свой вопрос. Безусловно C++ для меня потёмки ещё большие чем C#. На всякий случай брошу ссылку на свой нерешённый вопрос с примером: Рисование средствами API с сохранением нарисованного в свойстве BackGroundImage Это C#. Во вложении код на VB. Там форма с двумя кнопками. Верхняя кнопка работает как задуманно, но нарисованное стирается при перерисовке. Это я и не могу решить.
Вложения
Тип файла: rar OREILLY.rar (61.5 Кб, 1 просмотров)
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
11.01.2017, 04:19  [ТС]
Не задаётся режим рисования для графического окна
Рисование в графическом окне
0
11.01.2017, 12:55

Не по теме:

Цитата Сообщение от jkrnd Посмотреть сообщение
Хочу решить вопрос по рисованию с помощью функций API.
Понятно. Тут я к сожалению помочь не могу. В то же время переход на С++/CLI это уж слишком на мой взгляд. Потому что ты остаешься на .NET и вынужден бороться с совершенно новым языком. Лучше вернуться на C#.

0
-1 / 5 / 0
Регистрация: 22.11.2016
Сообщений: 68
14.01.2017, 01:48
jkrnd,
Хочу решить вопрос по рисованию с помощью функций API.
почему именно WinAPI напрямую? мсье знает толк в извращениях, или мсье тупо не знает, что System.Drawing из winforms - это готовая обертка для GDI и GDI+ и им делается все то же, что и WinAPI?
более того - в winforms есть даже кое-какая обертка для SendMessage, прикинь?
конечно wf и .net содержит обертки не для всего прям winapi, но в данном-то случае все есть, так что извратом ты занят
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
14.01.2017, 04:19  [ТС]
hemoa,

Не по теме:

соглашусь с Вами, если выложите пример GDI+ рисования с использованием растровых операций.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.01.2017, 04:19
Помогаю со студенческими работами здесь

Как использовать CSS в проектах Windows form
Как использовать css в проектах windows form, хочу сделать box-shadow для формы.

Как использовать в своем проекте функции из подключаемых файлов?
Друзья , прошу помощи по созданию моего первого многофайлового проекта на cpp. Пытался разобраться в теории , но не нашёл подходящей...

Можно ли в си использовать Windows API (в частности Windows 7) и как?
Можно ли в си использовать Windows API (в частности Windows 7) и как? Только именно в си, а не в плюсах. А то что-от не могу найти какой-то...

Нерабочий Scrollbar в проекте Windows Form
Наткнулся на проблему, связанную с скроллбаром. При установке его в разделе &quot;Дизайнер&quot; всё выглядит просто отлично, однако компиляция...

Вывод отладочной информации в проекте Windows Form
Довольно часто нужно смотреть промежуточные результаты расчетов матриц (вывести определенные строки или столбцы и т.п.). Хотелось бы иметь...


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

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

Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru