PDA

Visualizza la versione completa : C - Dubbi nelle librerie


XWolverineX
08-12-2008, 12:20
Guardando il topic precedente sulla LoadLibrary mi sono spuntati alcuni dubbi sulle librerie esterne in generale.

Allora

[list=1]
Per prendere GetProcAddress serve necessariamente sapere la firma della funzione. Se ho una DLL presa da chissà quale sito, come posso vedere i servizi che offre? Non volendo usare software che fanno ciò (potete segnalarmi comunque qualche nome?), come posso "enumerare" le funzioni presenti in una DLL?
Il linking statico è sicuramente piu' veloce. Ma come si fa esattamente? faccio la mia DLL, creo un file export con le funzioni che voglio esportare, e poi faccio un file include su quelle funzioni esportate?
Se faccio un linking statico, posso comunque dinamicamente prendere funzioni non esportate nel file di export?
Visual Basic 6 importa solo da dll in modo statico? Ma non c'è il file .lib, però. E' implicito?
Se volessi importare una classe da una dll, si fa tramite LoadResource? Oppure (mio pensiero) si implementa la classe in un file .h distribuito e le funzioni vengono valorizzate tramite GetProcAddress?
[/list=1]

Qualche domanda riguardo il COM

Come si implementa un'interfaccia COM?
Ho letto in giro da varie parti, ma non si mettono d'accordo se ogni interfaccia deve essere ereditata da IDisposable o da IUnknown.
Il reference counting come viene fatto? Una semplice variabile?
Avete un esempio funzionante, anche se minimale? Anche con il GUID e tutto il resto.

Grazie, e per qualsiasi chiarimento (sono sempre poco chiaro)...

oregon
08-12-2008, 12:28
Troppe domande per un solo post ... per rispondere solamente a quelle di COM ci vuole un libro ... :)

XWolverineX
08-12-2008, 12:36
Me ne rendo conto.
Almeno i fondamenti?Proprio l'essenziale?

oregon
08-12-2008, 12:42
Per vedere il contenuto di una DLL, puoi usare il tool

Dependency Walker

di Microsoft (che trovi in rete).

Con VB6 non puoi creare DLL standard ma ActiveX, che in pratica sono componenti COM.

Per COM, anche per le basi, come ti dicevo, ci vuole un libro ...

pallinopinco
08-12-2008, 12:44
Me ne rendo conto.
Almeno i fondamenti?Proprio l'essenziale?


Ma con quelle informazioni ci faresti poco o nulla, considera che su qualsiasi libro dedicato a COM per rispondere a ciascuna domanda gli autori hanno previsto almeno un capitolo. Con una risposta "da forum" non avresti comunque le informazioni necessarie per poter fare alcunché con COM. Se ti interessa l'argomento probabilmente dovresti acquistare un buon libro (http://www.woodtennis.com/dcombooks.htm)...

oregon
08-12-2008, 12:52
Per elencare le funzioni esportate puoi usare anche il tool

dumpbin

presente in Visual Studio.

Ad esempio, per la DLL del runtime di VB6 lo chiamerai con

dumpbin /EXPORTS c:\windows\system32\msvbvm60.dll

XWolverineX
08-12-2008, 13:11
Ok togliamo il COM da mezzo.
Possiamo rispondere alle altre 5 domande?

oregon
08-12-2008, 13:15
Originariamente inviato da XWolverineX
Ok togliamo il COM da mezzo.
Possiamo rispondere alle altre 5 domande?

A qualcuna ti ho gia' risposto ...

XWolverineX
08-12-2008, 13:29
Non sapevo che le librerie per Visual Basic fossero ActiveX (la mia ignoranza non ha limiti).

Io ne ho fatte alcune che ancora uso attualmente e non ho seguito alcun processo particolare nel costruirle.
Ma non mi tornano ancora una marea di cose

Come si fa una DLL "ActiveX?" Le ho fatte implicitamente per Visual Basic senza accorgermene?

oregon
08-12-2008, 13:43
Con il VB6 si possono creare SOLAMENTE DLL ActiveX ...

Loading