Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

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

09.01.2017, 20:04. Показов 6020. Ответов 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
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 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
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 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
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 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
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru