Как мне вызвать Win32 API из программы Cygwin - PullRequest
5 голосов
/ 02 апреля 2012

Я хочу использовать Win32 API в проекте, над которым я работаю.Однако я не знаю, как вызвать Win32 API из моего проекта cygwin.Может ли кто-нибудь указать мне правильное направление?

Ответы [ 3 ]

7 голосов
/ 02 апреля 2012

Win32 API можно получить из программы cygwin, включив заголовочный файл "windows.h". Конечно, это означает, что у вас установлены пакеты win32. Вот пример программы:

#include <iostream>
#include <string>
#include <windows.h>

int main(int argc, char *argv[])
{
    std::string val;

    if (argc > 1)
    {
        val = argv[1];
    }

    std::cout << "You typed: " << val << std::endl;
    ::MessageBox(NULL, val.c_str(), "You Typed:", MB_OK);

    return 0;
}

Это может быть скомпилировано и связано с "make filename", где filename.cpp содержит вышеуказанный источник. Затем выполните команду ./filename xxxx в приглашении bash. Затем в окне сообщения появится xxxx.

2 голосов
/ 02 апреля 2012

Вы можете взглянуть на Cygwin FAQ (в частности, 6.9. Как использовать вызовы Win32 API?)

Конечно, вам понадобится захватить заголовки WIN32API - вашлучший вариант - скачать / установить компилятор fre c ++ (например, MinGW) и обратиться к его заголовкам.

1 голос
/ 05 августа 2013

Если вы знаете Perl, вы можете использовать модуль win32 :: GUI для создания окон и диалогов.Убедитесь, что perl5 был включен в вашу установку cygwin.

Запустите cpan из командной строки cygwin, чтобы получить интерпретатор cpan, затем выполните команду get win32 :: GUI .

**To Get Familiar with win32::GUI**
===========================================
win32-gui-demos.pl for a tutorial 
man 1 win32-gui-demos.pl for an overview -or-
perldoc win32-gui-demos.pl for an overview 
perldoc win32::GUI for an intro

Если учебные пособия не запускаются из его меню, просто скопируйте и вставьте их в файл vi и сделайте их исполняемыми при сохранении.

Например: (простой диалог для улучшения)

#!perl -w
use strict;
use warnings;

use Win32::GUI();

my $main = Win32::GUI::DialogBox->new(
    -name => 'Main',
    -text => 'Continue with Outlook Backup?',
    -width => 200,
        -height => 200
);

$main->AddButton(
    -name    => 'Default',
    -text    => 'Ok',
    -default => 1,    # Give button darker border
    -ok      => 1,    # press 'Return' to click this button
    -width   => 60,
    -height  => 20,
    -left    => $main->ScaleWidth() - 140,
    -top     => $main->ScaleHeight() - 30,
);

$main->AddButton(
    -name   => 'Cancel',
    -text   => 'Cancel',
    -cancel => 1,    # press 'Esc' to click this button
    -width  => 60,
    -height => 20,
    -left   => $main->ScaleWidth() - 70,
    -top    => $main->ScaleHeight() - 30,
);

$main->Show();
Win32::GUI::Dialog();
exit(0);

sub Main_Terminate {
    return -1;
}

sub Default_Click {
    print "OK to Proceed Selected\n";
    return 0;
}

sub Cancel_Click {
      print "Cancel Backup Selected\n";
      return 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...