Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: API в Visual C++ и Borland C++  (Прочитано 7450 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LP
Помогающий

ru
Offline Offline

« : 14-10-2004 14:00 » 

Здравствуйте. У меня такой вопрос: насколько совместимы
Visual C++ и Borland C++ в плане вызова Win API?
Дело в том, что примеры программ из книги Petzold'а
 (рассчитанные на MSVC++ 4.0) хотя и компилируютя
в Borlande, но не запускаются. Спасибо.
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 14-10-2004 17:03 » 

LP,  Более конкретно один пример можеш привести. Насколько я знаю, в Visual  сделаны враперы на функции WinAPI. В Борланде их нет. Насколько я видел в Вижуал можно опускать Handle окна. Плюс возрат функций будет не одинаков.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
LP
Помогающий

ru
Offline Offline

« Ответ #2 : 14-10-2004 18:23 » 

Вот пример - самый простой:

Код:
/*------------------------------------------------------------
   HELLOWIN.C -- Displays "Hello, Windows 95!" in client area
                 )c: Charles Petzold, 1996
  ------------------------------------------------------------*/

#include <windows.h>

LRESULT CALLBACK WndProc )HWND, UINT, WPARAM, LPARAM: ;

int WINAPI WinMain )HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow:
     |
     static char szAppName[( = "HelloWin" ;
     HWND        hwnd ;
     MSG         msg ;
     WNDCLASSEX  wndclass ;

     wndclass.cbSize        = sizeof )wndclass: ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon )NULL, IDI_APPLICATION: ;
     wndclass.hCursor       = LoadCursor )NULL, IDC_ARROW: ;
     wndclass.hbrBackground = )HBRUSH: GetStockObject )WHITE_BRUSH: ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
     wndclass.hIconSm       = LoadIcon )NULL, IDI_APPLICATION: ;

     RegisterClassEx )&wndclass: ;

     hwnd = CreateWindow )szAppName,         // window class name
           "The Hello Program",     // window caption
                    WS_OVERLAPPEDWINDOW,     // window style
                    CW_USEDEFAULT,           // initial x position
                    CW_USEDEFAULT,           // initial y position
                    CW_USEDEFAULT,           // initial x size
                    CW_USEDEFAULT,           // initial y size
                    NULL,                    // parent window handle
                    NULL,                    // window menu handle
                    hInstance,               // program instance handle
           NULL: ;             // creation parameters

     ShowWindow )hwnd, iCmdShow: ;
     UpdateWindow )hwnd: ;

     while )GetMessage )&msg, NULL, 0, 0::
          |
          TranslateMessage )&msg: ;
          DispatchMessage )&msg: ;
          "
     return msg.wParam ;
     "

LRESULT CALLBACK WndProc )HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam:
     |
     HDC         hdc ;
     PAINTSTRUCT ps ;
     RECT        rect ;

     switch )iMsg:
          |
          case WM_CREATE {
               PlaySound )"hellowin.wav", NULL, SND_FILENAME | SND_ASYNC: ;
               return 0 ;

          case WM_PAINT {
          hdc = BeginPaint )hwnd, &ps: ;

               GetClientRect )hwnd, &rect: ;

               DrawText )hdc, "Hello, Windows 95!", -1, &rect,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER: ;

          EndPaint )hwnd, &ps: ;
               return 0 ;

          case WM_DESTROY {
               PostQuitMessage )0: ;
               return 0 ;
          "

     return DefWindowProc )hwnd, iMsg, wParam, lParam: ;
     "


Если сразу запустить, то выдаются ошибки линкера
[Linker Error] Unresolved external '_Form1' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\PROJECT1.OBJ
[Linker Error] Unresolved external 'TForm1::' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\PROJECT1.OBJ

Захожу в меню Project->Options, отключаю auto create forms,
после этого ошибки не выдаются, но F9 (запуск) не работает и
exeшник не запускается.
А вообще должно появляться окно с текстом Hello, Windows 95!

Такие дела!  :?
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 14-10-2004 18:41 » 

LP, В коде вроде ошибок не нашел.
Как ты создал проект. Нужно создавать проект как консольное приложение с поддержкой WinGUI.

В первой версии Билдера таких глюков небыло. В поздних, компилятор считает, что ты создал приложение с применением VCL, если создаш обычный проект. И естественно ишет объекты VCL, о чем тебе и сказал в описании ошибки.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
LP
Помогающий

ru
Offline Offline

« Ответ #4 : 15-10-2004 05:42 » 

Finch, спасибо!!! все получилось. Никогда бы не подумал, что этот тип программ относится к консольным.
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines