Avatar billede bjarke Nybegynder
02. februar 2000 - 16:13 Der er 10 kommentarer og
1 løsning

WIN32 API/Borland C++ Builder

Så oprandt dagen, hvor jeg også vil forsøge mig med windowprogrammering.

MEN, kan jeg bruge min Borland C++ Builder 3 til at compile/køre WIN32 API kode? (er det rigtigt formuleret?)

Jeg har prøvet at køre nedenstående kode, som bliver accepteret, men der sker bare ikke noget. Hvad gør jeg?

#include <windows.h>

int WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    MessageBox(NULL, TEXT("Hello world"), TEXT("Bjarkes messagebox"), 0);
    return 0;
}
Avatar billede dmk Nybegynder
02. februar 2000 - 16:28 #1
Den kode du så smukt har udarbejdet kører faktisk perfekt fra Visual C++.

Borland er lidt underlig med sin måde at håndtere sin main-funktion på. Den vil meget gerne have at mainprogrammet er mainformen. Jeg ved ikke helt hvordan man gør sådan noget, men der er en slags main-fil som man kan forsøge at klytte et eller andet i. Den kan jeg selvfølgelig ikke huske hvad heder, men mon ikke den heder noget i stil med det man kalder projektet? Jeg har ikke selv Borland installeret på min computer, da den er for ustabil og laver for mange mærkelige ting til, at jeg giver spilde tid på at debugge selve Borland for fejl, når jeg burde bruge tiden på at debugge mine egne programmer for fejl.

Har du ikke Visual, eller er det en form for religion der gør at du bruger Borland ? (Der er meget af den slags i omløb)..

DMK
Avatar billede soepro Nybegynder
03. februar 2000 - 11:43 #2
Der er kun een ting galt: første parameter til MessageBox API'en skal være din main-windows handle.

For at få din kode til at virke, skal du blot vælge New + Console Wizard og så vælge 'Windows GUI'. Du får så en tom WinMain, hvor du blot tilføjer din egen kode (idet du lige indsætter hInstance som handle):

#include <windows.h>
#pragma argused
int WINAPI WinMain( HINSTANCE hInstance,
                                HINSTANCE hPrevInstance,
                                PSTR szCmdLine, int iCmdShow)
{
  MessageBox((HWND)hInstance, TEXT("Hello world"), TEXT("Bjarkes Messagebox"), 0);
  return 0;
}

'#pragma argused' er for at undgå warnings på de WinMain parametre du ikke bruger. Du er nødt til at caste hInstance til HWND, for at MessageBox accepterer den som handle.

Du kan også lave en "rigtig" VCL version i BCB, ved at vælge New Application, og dernæst lave Close af Form1 uden at save den. (Hermed er kun WinMain koden tilbage.) Dernæst kopierer du blot din kode ind i den af BCB genererede kode (som du kan finde f.eks. vha. 'View+Project Manager' og dobbeltklik på CPP modulet):

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("helloworld.res");
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  Application->MessageBox("Hello world", "Bjarkes messagebox", MB_OK);
  return 0;
}
//---------------------------------------------------------------------------
Avatar billede soepro Nybegynder
03. februar 2000 - 11:47 #3
dmk >> C++ Builder er billigere en MVC, og var for mig det naturlige valg, da jeg havde kørt på Borland's Turbo C++ 3.0 og Borland C++ 5.02 før. Jeg har kunnet flytte min kode, uden at gøre andet end at sætte nogle options. Det TROR jeg ikke på at jeg ville have kunnet med MVC. (Men jeg VED det selvfølgelig ikke.)
Avatar billede dmk Nybegynder
03. februar 2000 - 12:15 #4
Soepro >> Så længe du vil lave GUI programmering, så kan jeg da kun anbefale Builder frem for MVC. Det er et helvede at lave brugergrænseflader i MVC. Det skal dog bemærkes, at hvis lykkedes at lave dem i MVC i stedet for borland, så er de som regel mindre tunge at arbejde med, og de går ikke så tit ned i noget underligt VCL kode.
Men hvis brugergrænsefladen ikke er det essentielle i ens programmer, men derimod selve koden bag (hvis man fx. laver en server der bare skal køre i en konsol app.), så er Visual meget mere stabil, meget nemmere at debugge og laver meget bedre kode. Det er i hvert fald min erfaring. Men det er selvfølgelig meget en smagssag. Jeg var ikke helt glad for Visual i starten da jeg flyttede fra Borland, og jeg syntes stadig den dag idag, at Borlands editor er rarere at arbejde med en Visuals.

DMK
Avatar billede bjarke Nybegynder
03. februar 2000 - 17:05 #5
soepro >> Tak skal du have. Det var jo ganske enkelt - og i øvrigt tak for de supplerende kommentarer til programmet mm.

dmk >> Religion? Tja, det kan man godt sige. Ikke fordi jeg absolut vil bruge Borland frem for MVC, men fordi jeg har Borland i forvejen og ikke bruger piratkopier. Borland kunne jeg købe som studerende for kun 500,- så det valgte jeg at gøre. Hvis jeg brugte piratkopier ville jeg nok anskaffe mig MVC, da bogen jeg bruger antager, at man bruger MVC. Grunden til at jeg ikke bruger piratkopier er, at jeg som kristen ikke kan være med til den slags ulovligheder - uanset hvad man mener om microsoft-priser mm. Så religion? Ja, men nok ikke sådan som du mente :-)

-Bjarke

PS: Dog har jeg ikke noget imod at bruge alternativer til microsoft-produkter. Jeg håber også, at jeg en dag får taget mig sammen til at prøve at køre Linux i stedet for Windows...
Avatar billede bjarke Nybegynder
03. februar 2000 - 17:09 #6
Hvad er forresten HWND og VCL? Og hvad er en handle? Og hvad betyder returtypen WINAPI?
Avatar billede dmk Nybegynder
03. februar 2000 - 17:23 #7
HWND er en forkortelse for handle, og er blot en pointer der identificerer et-eller-andet. Fx. kender du nok en FILE*, hvilket også blot er et handle.

VCL står for Visual Component Library, og er Borlands standard-bibliotek for gui-komponenter. Alle komponenterne i en borland brugergrænseflade er en del af VCL, alt lige fra en TEdit, TButton TForm og TComponent. VCL er et hirakisk objektorienteret klassebibliotek, hvor alle objekter overhovedet nedarver fra den samme base-klasse (TObject ?, Det er vist ikke den nederste, der er noget lavere endnu).

WINAPI er ikke en returværdi. Din WinMain funktion kan jo ikke returnerer to forskellige ting, og den returnerer allerede en int ! WINAPI er en definement, som er defineret til __stdcall. Det har et eller andet med stak-håndtering at gøre når man kalder den pågældende funktion.

I øvrigt, jeg bruger også selv programmer der er betalt for, selv om jeg ikke selv har skullet slippe noget. Min arbejdsplads har selvfølgelig de rigtige licenser :-) Og jeg er ikke særlig religiøs mht. compiler, der er fordele og ulemper ved det hele. De fleste af dem jeg omgiver mig med i hverdagen bruger KUN g++ (linux), så jeg er lidt af en outsider fordi jeg overhovedet bruger noget til Windows.

DMK
Avatar billede bjarke Nybegynder
04. februar 2000 - 09:28 #8
Tak :-)
Avatar billede bjarke Nybegynder
08. februar 2000 - 09:54 #9
Hjælp soepro! Wizarden findes ikke i Builder 4 - hvad skal jeg vælge der?
Avatar billede soepro Nybegynder
08. februar 2000 - 11:56 #10
bjarke >> Har du så ikke muligheden for at vælge en 'Console Application'  ??? Vælg 'File' + 'New'. Så skulle du få en "tab" der hedder 'New', hvorunder der skal ligge en 'Console Wizard' eller 'Console Application'. (Jeg benytter selv C++ Builder 4 men godt nok en PRO udgave - der har jeg Wizarden.)
Avatar billede bjarke Nybegynder
09. februar 2000 - 16:05 #11
Tak for hjælpen soepro. Det viste sig, at det skyldtes, at der var noget galt med installationen på studiet og at programmet derfor skulle reinstalleres - så det var rigtigt nok, at jeg ikke kunne lave en console application.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis