Newsgroup: it.comp.lang.c++
Titolo: API in C++Builder

Poiche' la Borland (Inprise) ha abbandonato la OWL (lo so, ormai e' storia vecchia), e, in
previsione di una piu' o meno veloce obsolescenza della stessa, ho iniziato (proprio in
questi giorni) ad usare il C++Builder.
A parte l'iniziale rammarico nell'impossibilita' di usare l'ereditarieta' multipla su
tutto cio' che e' o deriva dalla VCL (alcune mie interfaccie che si basano su questo
dovranno essere riviste :-(((), ho provato ad usare qualcosa delle API pure.
Qualcuno sa dirmi cosa c'e' che non va nel seguente codice?
// --------------------------------------------------------------------------------
BOOL CALLBACK WndDlgProc(HWND, UINT, WPARAM, LPARAM);
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  const UINT Id = IDD_TEST;
  HINSTANCE hinst = reinterpret_cast<HINSTANCE>(GetWindowLong(Handle,GWL_HINSTANCE));
  DialogBoxParam(hinst,MAKEINTRESOURCE(Id), Handle,
WndDlgProc,reinterpret_cast<LPARAM>(this));
}
// --------------------------------------------------------------------------------
La dialogbox ritorna -1, cioe' si tratta di un errore nella creazione del dialogo.
Ho provato a vedere cosa mi tornava GetLastError() e, in Win95, mi dice che non e'
possibile creare un file se gia' aperto. Invece, in Win98, la prima volta dice che c'e' un
parametro errato, poi continua a dire che non si sono verificati errori.
Ho verificato che: l'Handle e' giusto ed anche l'instanza, il file .RC viene compilato e
linkato correttamente, l'Id e' giusto, la procedura l'ho limitata a tornare true nella
WM_INITDIALOG e a chiudere il dialogo in risposta a IDOK o IDCANCEL.
Ho provato a seguire il flusso dalla view della CPU finche' arriva alla jmp
DialogBoxParamA. Se continuo vedo che torna -1 in EAX. Se provo a saltare all'indirizzo
puntato mi da errore di zona di memoria illecita.
Ah, dimenticavo, ho definito STRICT, cosi' non c'e' bisogno del cast a DLGPROC per la
window procedure.
Io ce la sto mettendo tutta per non abbandonare la Borland (mi piace chiamarla ancora
cosi'), ma se continuero' a incontrare difficolta' .........
Un grazie a chi mi convincera' a perseverare :-)
Nazzareno

 cosi'), ma se continuero' a incontrare difficolta' .........
Pure io, però intanto uso anche gcc di GNU Win32 con il framework V di
Bruce Wampler.
 
Ciao
Roberto
---
The C++ Compass: 
http://space.tin.it/computer/rgerola

...


 e' troppo complicato, e aver speso soldi per niente.
Gestire l'interfaccia utente di Windows è vero che è complicato, ma è
proprio per questo che sono nati i frameworks: MFC, OWL, VCL, ... ed
anche quelli non commerciali.
Qualche anno fa anch'io mi sono trovato nelle stesse condizioni, ed
avevo iniziato passo dopo passo seguendo il tutorial sul CD di
installazione. Questo naturalmente per iniziare.
Per documentazione, links ed altro prova su : 
http://www.inprise.com
 e
seguire i links di Borland C++.
In particolare cerca gli articoli di : Borland C++ Developer's Journal.
Sono fatti molto bene.
Ciao
Roberto

variabile già definita dalla VCL: HInstance.
Ho trovato dove non andava, era una cosa talmente stupida che quasi mi vergogno a dirla
:-)
Non avevo fatto attenzione ai settaggi per la creazione dell'EXE stand alone o con l'uso
delle DLL :-(
Usando la DLL l'handle della window si portava appresso l'hinstanza della dll (anche
usando Application->Handle non dava l'hinstanza voluta).
Grazie al tuo tip (usando HInstance) mi sono accorto che non coincidevano e sono risalito
cosi' all'errore.
Quel che mi sembra strano, pero', e' che usando il WinSight, l'hinstanza dell'eseguibile
risulta essere la stessa della form !?!
Ora avrei un altro problemino, ma l'ho giusto buttato giu' senza verificato bene.
Ho creato un gruppo di progetti per le mie librerie, poi ho usato una form provando a
richiamare una mia classe. Mi da errore nel linker dicendo che non ne trova
l'implementazione. Ho visto che l'IDE ha aggiunto automaticamente la define NO_VCL nei
progetti delle librerie, puo' dipendere da questo? (Ok, ok, avete ragione tutti, "toglila
e prova, noo?" :-)))
Ciao e grazie :-)
Nazzareno

....


Prova al server di News dell Inprise:
forums.inprise.com

...
