Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование функций WinAPI в WinForms

7.5K
01 апреля 2007 года
sadman
45 / / 21.01.2006
Облазил форумы по .НЕТ, ничё толком не нашёл :(
Вобщем, использую MSVC 2005. Winforms.
Нужны функции winapi.
на pinvoke.net нашёл такой пример:
 
Код:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern uint MessageBox(IntPtr hWnd, String text, String caption, uint type);

Но он вроде как для СиШарп, и у меня не пашет.

Спасибо за помощь!
355
01 апреля 2007 года
<SCORP>
786 / / 21.10.2006
насколько я знаю, WinForms почти полностью реализуют WinAPI для работы с окнами. поэтму непонятно, зачем может понадобиться прямое обращение в вин апи. если нужен конкретно message box, System.WinForms.MessageBox.Show(...)
7.5K
01 апреля 2007 года
sadman
45 / / 21.01.2006
Ну MessageBox я привёл просто как пример, и мне могут потребоваться функции winapi для работы с системой, а не с окнами, которых winforms не предоставляет к использованию
713
01 апреля 2007 года
Ap0k
360 / / 13.03.2006
Приведите код, в котором пользуетесь примером с pinvoke
355
01 апреля 2007 года
<SCORP>
786 / / 21.10.2006
Цитата: sadman
Ну MessageBox я привёл просто как пример, и мне могут потребоваться функции winapi для работы с системой, а не с окнами, которых winforms не предоставляет к использованию


скорее всего они просто содержаться в других сборках или пространствах имён

7.5K
01 апреля 2007 года
sadman
45 / / 21.01.2006
<SCORP>: ну может быть. Но мне гораздо проще импортнуть функции winapi, с которыми я уже работал, чем искать аналоги в .NET

Ap0k: как я уже писал - работаю в winforms, в котором генерится много кода связаного с формой, посему выкладывать Весь код не буду.
Итак, пробовал импортировать функцию еще ДО объявления namespace'а моей формы:
 
Код:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern uint MessageBox(IntPtr hWnd, String text, String caption, uint type);

namespace FileShare_Form {
    using namespace System;
....

Также пробовал непосредственно перед объявлением класса формы, уже в namespace'е:
 
Код:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern uint MessageBox(IntPtr hWnd, String text, String caption, uint type);

public ref class Form1 : public System::Windows::Forms::Form
{
...

И, наконец, прямо в методах формы:
 
Код:
private: System::Void hz4toEtoToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
{
    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern uint MessageBox(IntPtr hWnd, String text, String caption, uint type);
}
355
01 апреля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата: sadman
мне гораздо проще импортнуть функции winapi, с которыми я уже работал, чем искать аналоги в .NET
[/code]



а зачем тебе тогда дот нет, если ты с ним раньше не работал? ведь тебе легче взять и написать на чисто WinAPI :confused:

7.5K
02 апреля 2007 года
sadman
45 / / 21.01.2006
всё дело в ГУЙе. На винапи это долго, муторно и не очень красиво, чего не скажешь о .NET'е. Тем более почему ты решил что мне будет легче писать на winapi? мне просто нужны несколько функций оттуда, и фсё :)
713
02 апреля 2007 года
Ap0k
360 / / 13.03.2006
Код:
[COLOR=blue]using[/COLOR] System;
    [COLOR=blue]using[/COLOR] System.Runtime.InteropServices;    
 
    [COLOR=blue]class[/COLOR] Class1
    {
        [[COLOR=mediumturquoise]DllImport[/COLOR]([COLOR=darkred]"user32.dll"[/COLOR], CharSet=[COLOR=mediumturquoise]CharSet[/COLOR].Auto)]
        [COLOR=blue]public static extern int[/COLOR] MessageBox([COLOR=mediumturquoise]IntPtr[/COLOR] hWnd, [COLOR=mediumturquoise]String[/COLOR] text, [COLOR=mediumturquoise]String[/COLOR] caption,
            [COLOR=blue]uint[/COLOR] type);
 
        [[COLOR=mediumturquoise]STAThread[/COLOR]]
        [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main([COLOR=blue]string[/COLOR][] args)
        {
            [COLOR=mediumturquoise]Class1[/COLOR].MessageBox([COLOR=blue]new[/COLOR] [COLOR=mediumturquoise]IntPtr[/COLOR](0), [COLOR=darkred]"Text"[/COLOR], [COLOR=darkred]"Caption"[/COLOR], 0 );
        }
    }

Работает.
 
Код:
[LEFT]private: System::Void hz4toEtoToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
{
   [DllImport("user32.dll", CharSet=CharSet.Auto)]
   public static extern uint MessageBox(IntPtr hWnd, String text, String caption, uint type);
}[/LEFT]

А зачем в CLI испозовать маршалинг? :confused: там же достаточно подключить [COLOR=sienna]<windows.h>[/COLOR]
7.5K
02 апреля 2007 года
sadman
45 / / 21.01.2006
Цитата:
Работает.


Это если проект с самого начала создать. Я повторюсь - у меня проект winforms, я сначала в редакторе создал свою форму. И теперь я не совсем понимаю куда мне всунуть этот отрезок кода, который у тебя работает...:(

273
05 апреля 2007 года
3A3-968M
1.2K / / 22.12.2005
Да куда хочешь, хочешь в класс своей формы, этот метод является статическим членом класса, а там уже в зависимости от области видимости.....не понятно, что не так??? ты вызвать что-ли её не можешь или что??
57K
24 марта 2010 года
bom0
8 / / 24.03.2010
http://www.intuit.ru/department/pl/visualcsharp/5/4.html как насчет этого?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог