Newsgroup: it.comp.lang.visual-basic
Titolo: [API] RegisterClass

Ciao, devo usare quest'Api per registrare una Dll di cui so l'indirizzo
fisico su disco,
come parametro vuole un puntatore alla seguente struttura:
typedef struct _WNDCLASS {
    UINT    style;
    WNDPROC lpfnWndProc;
    int     cbClsExtra;
    int     cbWndExtra;
    HANDLE  hInstance;
    HICON   hIcon;
    HCURSOR hCursor;
    HBRUSH  hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName;
} WNDCLASS;
Ma non so come fare, mi sono letto la guida (in inglese) e non ci ho capito
un Mazza.
Io vorrei una funzione/Api che mi ritorna un valore se la registrazione è
andata a buon fine, 0 se si è verificato un errore: qualcuno può darmi una
mano?
Ciao a tutti
Oz

 wrote in message
news:9du13m$1n08$1...@ID-77238.news.dfncis.de...


 registrare deregistre componenti com.
Se mi manderesti quel modulo te ne sarei veramente grato.
l'indi è :  
carew...@tiscalinet.it
Ciao
Oz

Lo daresti anche a me?
cap...@infinito.it
            Grazie
                    Allanon

 struttura:
Direi che tu abbia decisamente frainteso l'utilizzo della funzione in
oggetto.
La RegisterClass serve per registrare una classe di "finestre" (da
utilizzare poi con CreateWindow) e non una dll.
Ciao.

E qual'è l'Api per registrare una Dll/Ocx?
Ciao
Oz

 E qual'è l'Api per registrare una Dll/Ocx?
E' la dll COM stessa che si auto-registra esportando la funzione
DllRegisterServer e DllUnregisterServer per de-registrarsi. Ma non e'
obbligatorio che una dll COM esporti queste due funzioni. Nel caso esse
non siano presenti nella dll non ci sarebbe possibilita' di registrarla
(pure RegSvr32.exe fallirebbe) se non inserendo manualmente le varie
entry nel registro.
Utilizzare queste funzioni da VB e' abbastanza complesso in quanto
andrebbero dichiarate in questa maniera:
Declare Sub DllRegisterServer Lib "Nome_delle_dll_da_registrare" ()
Declare Sub DllUnregisterServer Lib "Nome_delle_dll_da_registrare" ()
E' quindi impossibile se non si conosce a priori il nome della dll.
Altrimenti e' necessario caricare la dll con LoadLibrary, ottenete
l'indirizzo della funzione tramite GetProcAddress, richiamare in qualche
modo la funzione tramite il suo indirizzo (cosa impossibile in VB se non
ricorrendo a qualche "sporco" trucchetto) e rilasciare la dll con
FreeLibrary.
Ci sono vecchi post di Hyperion a proposito di uno "sporco" trucchetto
per chiamare una funzione dal suo indirizzo.
Il mio consiglio e' comunque di lasciare il lavoro a componenti che sono
predisposti per questo (come RegSvr32.exe).
Ciao.


Io conosco solo il percorso fisico della mia Dll/ActiveX:
C:\BlaBla\Presenze.dll e mi sembra che tu mi hai indicato il metodo
per dll normali tipo User32 ecc...
Ciao
Oz

 indicato il metodo per dll normali tipo User32 ecc...
Certo, ogni dll/ActiveX esporta 4 funzioni, 2 (DllGetClassObject e
DllCanUnloadNow) sono obbligatorie, 2 (DllRegisterServer e
DllUnregisterServer) sono facoltative ma in pratica sono presenti in
quasi tutte le dll/ActiveX.
Queste 4 funzioni sono utilizzabili esattamente come qualunque altra
funzione esportata da una dll "normale" (non COM) tipo "User32", ecc...
e quindi da VB le puoi utilizzare con una Declare:
Declare Sub DllRegisterServer Lib "C:\BlaBla\Presenze.dll" ().
Questo tipo di utilizzo funziona perfettamente ma obbliga a conoscere il
percorso completo della dll in fase di sviluppo. Il che potrebbe non
essere possibile, come in un programma d'installazione che consenta la
scelta del percorso.
Ciao.

 scelta del percorso.
Non sono d'accordo (se mai correggimi)
Mettiamo di avere Presenze.dll nel percorso C:\blabla\presenze.dll.
Se io tengo 2 percorsi, uno fisso quando sono in fase di progettazione ed
uno con app.path quando il programma è installato, allora posso dichiarare
questa funzione
come un'Api di Win e lanciandola posso registrare la dll?
Ultima domanda, poi non ti stresso: perchè certe dll devono essere
registrate ed altre no?
Ciao
Oz

 come un'Api di Win e lanciandola posso registrare la dll?
Ho provato e funge, ma sono al punto di prima perchè io devo sapere se la
dll può essere registrata oppure se in fase di registrazione viene generato
un errore...
Accipicchia,Acciderbolina....
Ciao
Oz

 registrate ed altre no?
E' la tecnologia (COM) che le dll ActiveX utilizzano a richiedere la
loro registrazione. Anche l'utilizzo di una dll "normale" e' totalmente
diverso da quello di una dll ActiveX.
Ciao.

 in fase di registrazione viene generato un errore...
Scusami, non mi ricordavo piu' il tuo problema originale. Il codice che
ti avevo scritto era stato semplificato.
Dichiara la funzione in questa maniera:
Declare Function DllRegisterServer lib "C:\blabla\presenze.dll" () As
Long
Se rla funzione restituisce 0 vuole dire che la registrazione ha avuto
successo, se restituisce un valore diverso da 0 la registrazione e'
fallita.
Ciao.

 fallita.
L'avevo già fatto, solo che sono abituato con le Api in cui avviene proprio
il contrario: 0 errore, <> 0 Tutto Ok.
Ti ringrazio per la pazienza e per i tuoi insegnamenti.
Ciao a buon rendere...
Oz

 in cui avviene proprio il contrario: 0 errore, <> 0 Tutto Ok.
Non per tutte e' cosi'. Una buona parte delle funzioni dell'API
restituisce 0 in caso di fallimento, ma altre restituiscono 0 in caso di
riuscita e codici di errore in caso di fallimento. Questo porta
inevitabilmente a confusione, ma la situazione e' questa.
Ciao.