|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Solesino (PD)
Messaggi: 1255
|
Differenza tra DLL e OCX
Salve a tutti,
qualcuno potrebbe gentilmente spiegarmi la differenza tra dll e ocx? Ho creato un piccolo programmino(in c++) a riga di comando che accetta dei parametri in ingresso e mi stampa a video una stringa. Partendo da questo vorrei richiamarlo da un altra apllicazione e per questo credo mi serva una dll o un ocx. Grazie in anticipo.
__________________
Desktop: AMD FX-8350 @4,2Ghz + A.C. FREEZER XTREME rev.2 - ASUS M5A99X EVO - 32GB DDR3 (4x8GB) @1866Mhz - Sapphire NITRO+ RX 580 8GB - SSD Crucial MX500 1TB - Antec Two Hundred - Seasonic Focus+ Platinum 650W Always remember to K.I.S.S. |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
non credo ti serva nessuno dei due, basta che fai il redirect degli standard streams impostando gli handles di tre pipes nella struttura STARTUPINFO che passi alla CreateProcess.
comunque una DLL é un modulo eseguibile che puó esportare simboli (dove per simboli si intende solitamente variabili e funzioni) ed essere caricato da processi che importano i simboli esportati; un OCX invece é una DLL contenente un controllo ActiveX, quindi un server COM in-process; fondamentalmente un server COM in-process é una DLL che esporta quattro funzioni:
se non hai capito neanche una parola allora lascia perdere DLL e OCX, non é roba da 5 minuti; la CreateProcess invece si impara in fretta. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Solesino (PD)
Messaggi: 1255
|
Quote:
Provo a spiegarti meglio il mio problema: l'applicazione principale è scritta in Visual FoxPro, però visto che non è il massimo dal punto di vista della sicurezza del codice vorremmo "esternare" alcune funzioni importanti scrivendole in un linguaggio più sicuro. Per questo ho scelto il c++ e ho realizzato un programmino di prova. Secondo te tra dll e ocx quale mi conviene? Se non ho capito male tramite l'ocx potrei creare un oggetto all'interno del mio programma e utilizzarne le funzioni quando voglio giusto? Mentre con la dll non avrei un vero e proprio oggetto ma mi limiterei a richiamare le funzioni che ho creato..? Spero di aver capito qualcosa di giusto. Cmq non mi preoccupa il fatto di perderci del tempo, voglio che venga fuori un bel lavoro e sono disposto a studiarmi bene la cosa. Mi basta sapere da cosa partire e cosa mi serve per andare avanti. Grazie
__________________
Desktop: AMD FX-8350 @4,2Ghz + A.C. FREEZER XTREME rev.2 - ASUS M5A99X EVO - 32GB DDR3 (4x8GB) @1866Mhz - Sapphire NITRO+ RX 580 8GB - SSD Crucial MX500 1TB - Antec Two Hundred - Seasonic Focus+ Platinum 650W Always remember to K.I.S.S. |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
non ho mai usato Visual FoxPro e quindi non ho idea di come sia possibile dal suo interno utilizzare una DLL o un OCX, quindi in altre parole non risponderti
per quanto riguarda la differenza tra DLL e OCX credo che tu abbia intuito bene: una DLL non fa che esportare simboli (nella stragrande maggioranza dei casi funzioni) che possono essere richiamate da altri moduli eseguibili, quindi in sostanza una DLL é una "libreria" di codice riutilizzabile; DLL sta proprio per Dynamic-Link Library. un OCX invece é una DLL che implementa un tipo specifico di server COM: si tratta infatti di un server COM in-process che permette di istanziare oggetti ActiveX, cioé oggetti COM che espongono determinate interfacce. se hai la possibilitá dall'interno di Visual FoxPro di invocare le funzioni esportate da una DLL allora la strada della DLL é di gran lunga preferibile a quella dell'OCX perché devi apprendere un centesimo delle cose; per gli OCX invece ti avverto, é molto lunga questo é il punto di partenza per le DLL: http://msdn.microsoft.com/en-us/libr...89(VS.85).aspx per gli OCX invece devi partire da qui: http://msdn.microsoft.com/en-us/libr...73(VS.85).aspx studiandoti i seguenti argomenti (quello che non ho segnato puoi saltarlo a pié pari, il problema é che ho segnato quasi tutto ):in COM Fundamentals:
in Controls and Property Pages, naturalmente tutto in Automation Programming Reference:
per finire, la sezione su MIDL (Microsoft Interface Definition Language) la consulterai piu che altro come reference del linguaggio MIDL che avrai appreso giá nelle sezioni precedenti, mentre lo Structured Storage credo proprio che lo salterai (parla dei meccanismi che servono a rendere persistente un oggetto COM, cioé come gestire il "salvataggio" del tuo oggetto su file e come "ripristinarlo". sapevi che la shell di Windows vede tutto come un oggetto OLE? per quanto riguarda la sezione fondamentale, COM Fundamentals, puoi saltare tutta la parte relativa al marshalling (che non avviene mai per i controlli ActiveX locali), ai proxy/stub e alla sicurezza; se poi, in seguito, ti rendi conto che ti é utile anche la parte sulla sicurezza, allora studiati anche quella. per darti un'idea di cosa faccia il sistema di sicurezza di DCOM* ti dico molto sinteticamente che serve ad autenticare i client che fanno uso di oggetti COM e a proteggere ogni singolo metodo di un oggetto COM da chiamate provenienti da client autenticati con identitá non autorizzate; si tratta di un sistema robusto basato a sua volta sul sistema di sicurezza del sistema operativo. * COM e DCOM sono quasi la stessa cosa: DCOM sta per Distributed COM e si parla di DCOM anziché di COM quando si parla di server COM che girano su macchine remote; non ha senso parlare di sicurezza in COM perché se il server é locale puó essere facilmente hackerato, specialmente se é un server in-process e specialmente se usa un threading model tale da non aver bisogno di un proxy per il marshalling (a quel punto il sistema di sicurezza é totalmente assente visto che é implementato proprio dai proxy/stub). |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Solesino (PD)
Messaggi: 1255
|
Per utilizzare una dall in FoxPro dovrebbe dovrebbe essere questo:
Codice:
DECLARE TipoRestituito NomeFunzione IN NomeDLL.dll TipoParametro1 @, TipoParametro2 @, .... Ieri ho provato a fare una dll seguendo quello che ho trovato in rete ma da errore perchè non riesce a trovare il punto d'ingresso. Ora mi studio quello che mi hai suggerito e vedo dove sbaglio. Ti ringrazio per la spiegazione, ora ho le idee più chiare e so da dove posso iniziare, grazie!
__________________
Desktop: AMD FX-8350 @4,2Ghz + A.C. FREEZER XTREME rev.2 - ASUS M5A99X EVO - 32GB DDR3 (4x8GB) @1866Mhz - Sapphire NITRO+ RX 580 8GB - SSD Crucial MX500 1TB - Antec Two Hundred - Seasonic Focus+ Platinum 650W Always remember to K.I.S.S. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Solesino (PD)
Messaggi: 1255
|
Credo di aver fatto qualche passo in avanti, ora non mi da più errori, anche se non funziona ancora come vorrei(adesso cerco di approfondire).
Se ci fossero altri interessati all'argomento segnalo anche questa pagina qui.
__________________
Desktop: AMD FX-8350 @4,2Ghz + A.C. FREEZER XTREME rev.2 - ASUS M5A99X EVO - 32GB DDR3 (4x8GB) @1866Mhz - Sapphire NITRO+ RX 580 8GB - SSD Crucial MX500 1TB - Antec Two Hundred - Seasonic Focus+ Platinum 650W Always remember to K.I.S.S. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:14.












):








