Newsgroup: it.comp.programmare.win32
Titolo: [Newbie] Primi passi con la programmazione sotto Windows

Salve a tutti!
Sto provando a mettere in pratica i tutorials
di Alex Martelli sulla programmazione sotto
Windows. Mi sono impantanato gia' al secondo
esempio :-(
Ho creato questi 3 files:
-----------------program.c-------------------
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst,
                   HINSTANCE hPrevInst,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
 DialogBoxParam(0,"MyDialog",0,0,0);
 return 0;
}
---------------------------------------------
-----------------rsrc.rc---------------------
#include <windows.h>
MyDialog DIALOG DISCARDABLE 0,0,186,92
STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU
CAPTION "Un Dialog Box vuoto"
FONT 8,"MS Sans Serif"
{
}
----------------------------------------------
...il terzo e' un file BATCH che dovrebbe
produrre compilare i due files e linkarli
in modo da produrre l'eseguibile finale:
------------------make.bat--------------------
brc32.exe -v -r -forsrc.res rsrc.rc
pause
bcc32.exe -c  -tW -oprogram.obj program.c
pause
tlink32.exe -r program.obj,a.exe,rsrc.res
pause
----------------------------------------------
brc32,bcc32 e tlink32 sono quelli del
BC++Builder3 (in regalo su 
inter.net
 di marzo)
L'errore che mi viene segnalato e':
Error: Unresolved external 'DialogBoxParamA'
 referenced from module program.c
Ringrazio tutti quelli che mi daranno una mano

  referenced from module program.c
Evidentemente manca qualche libreria (User32,
immagino), che spero bene sia compresa nel
pacchetto di sviluppo che usi, ma non so come
dire al tuo linker di usarla; prova a girare il
linker senza parametri, forse ti da` un conciso
messaggio di help.
Alex

 messaggio di help.
Ho usato compilatore,comp.di risorse e linker del C++Builder3
che era in regalo con 
inter.net
 di marzo. Ho provato a combinare
varie opzioni del linker, ma senza successo.
...Comunque ecco il "conciso messaggio di help":
------------------------tlink32 >tlink32.txt-------------------
Turbo Link  Version 2.5.0.0 Copyright (c) 1993,1998 Borland International
Syntax: TLINK32 objfiles, exefile, mapfile, libfiles, deffile, resfiles
@xxxx indicates use response file xxxx
  -m      Map file with publics     -x       No map
  -s      Detailed segment map      -L       Specify library search paths
  -M      Map with mangled names    -j       Specify object search paths
  -c      Case sensitive link       -v       Full symbolic debug information
  -Enn    Max number of errors      -n       No default libraries
  -P-     Disable code packing      -H:xxxx  Specify app heap reserve size
  -OS     Do smart linking
  -B:xxxx Specify image base addr   -Hc:xxxx Specify app heap commit size
  -wxxx   Warning control           -S:xxxx  Specify app stack reserve size
  -Txx    Specify output file type  -Sc:xxxx Specify app stack commit size
          -Tpx  PE image            -Af:nnnn Specify file alignment
                (x: e=EXE, d=DLL)   -Ao:nnnn Specify object alignment
  -ax     Specify application type  -o       Import by ordinals
          -ap Windowing Compatible  -Vd.d    Specify Windows version
          -aa Uses Windowing API    -r       Verbose link
---------------------------------------------------------------------
Ho provato ad aggiungere il "-aa", ma nemmeno cosi' funziona :-((
Quando hai scritto il tutorial, che compilatore hai usato? (Potrei
sempre procurarmelo....)
Per sfizio ho provato a tradurre l'esercizio in assembler (MASM), e
funziona perfettamente! Ecco il sorgente:
----------------------------alex2.asm--------------------------------
      .386
      .model flat, stdcall
      option casemap :none
      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
        WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
    .data
        szDisplayName db "Un Dialog vuoto",0
        szClassName   db "MyDialog",0
        CommandLine   dd 0
        hWnd          dd 0
        hInstance     dd 0
    .code
start:
    invoke GetModuleHandle, NULL
    mov hInstance, eax
    invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
     WinMain proc hInst     :DWORD,
                  hPrevInst :DWORD,
                  CmdLine   :DWORD,
                  CmdShow   :DWORD
      invoke DialogBoxParam,0,ADDR szClassName,0,0,0
      ret 0
WinMain endp
end start
----------------------------------------------------------------
Vorrei comunque imparare ad usare un linguaggio di alto livello
con il solo supporto delle API: preferisco partire dalle basi,
per imparare le MFC o le VCL ho sempre tempo (in ogni caso sono
un hobbysta, non un programmatore).
Ti ringrazio per la risposta e per i tuoi tutorials, ma se mi
dici che compilatore+linker hai usato quando li hai scritti (i
tutorials), ti saro' ancora piu' riconoscente..... :)))

 tlink32.exe -r program.obj,a.exe,rsrc.res
Non conosco questo linker, ma apparentemente non include di default le
librerie standard. DialogBoxParam() sara` definita in USER, quindi devi
includere anche user32.lib.
In generale ti conviene farti una lista delle LIB piu` comuni e
includerle sempre (tanto sono import libraries e non aumentano la
dimensione dell'eseguibile). Per inciso il Visual C++ include di
default:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
E` possibile che il compilatore della Borland usi dei nomi differenti
per alcune lib, a te trovare le corrispondenze.
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

 tutorials), ti saro' ancora piu' riconoscente..... :)))
Li ho provati con gcc (versione mingw32) e visual c++.
Nel capitolo 0 ho i link da cui scaricare gratuitamente
gcc con mingw32 (e altre versioni).
Alex

> Li ho provati con gcc (versione mingw32) e visual c++.
Mi sono procurato il Visual C++ e funziona!!!!
L'eseguibile risulta di soli 28kb!
Ora sono proprio soddisfatto e posso andare
avanti con i tuoi tutorial.
Ringrazio anche Lorenzo!
PS: Con il MASM, si ottiene un exe di soli 3 kb!!!!