È possibile utilizzare l'oggetto COM dalla DLL senza registrarsi nel codice C++ non gestito?Utilizzare l'oggetto COM dalla DLL senza registro
risposta
Sì, se non si basa internamente su altri oggetti registrati.
- È
LoadLibrary
la DLL - È
GetProcAddress
suaDllGetClassObject
- Si chiama
DllGetClassObject
di ottenereIClassFactory
puntatore perCLSID
di interesse - Tu sei buono per andare con
IClassFactory::CreateInstance
e istanziare coclasse
2 ½. Assicurati di essere nell'appartamento corretto prima di chiamare 'DllGetClassObject'. Anche così, non sarà possibile eseguire il marshalling per le interfacce del modello di oggetto specifico. Anche se gli oggetti COM C++ implementano 'IMarshal' o' IProvideClassInfo', sarà necessario fare lo stesso se si è quello che fornisce gli oggetti che implementano una di queste interfacce (ad esempio dispstfaces di eventi). Per questi motivi e molti altri, questa è una cattiva pratica. Dovresti invece usare COM free registration. – acelent
È possibile creare file manifest per la DLL e utilizzare Registration-Free COM.
Dire, la DLL COM deve essere registrata, ma l'applicazione non ha diritti di accesso amministratore. Ecco un trucco facile da registrare la DLL in HKEY_CURRENT_USER
, che non richiede diritti di amministratore:
- Usa
LoadLibrary
per caricare la DLL COM. - Chiama il numero
GetGetProcAddress
per ottenere l'indirizzo diDllRegisterServer
. - Chiama il numero
RegOverridePredefKey
per reindirizzare il registro temporaneo:HKEY_LOCAL_MACHINE
aHKEY_CURRENT_USER
eHKEY_CLASSES_ROOT
aHKEY_CURRENT_USER\Software\Classes
. - Chiamare
DllRegisterServer
ottenuto al passaggio 2. - Invertire i reindirizzamenti del Registro di sistema.
- Utilizzare il server COM come al solito, ora è registrato con
HKEY_CURRENT_USER
.
"facile" mod. Però intelligente. – Dmitry
- 1. Come utilizzare Dll COM di registrazione gratuita in dot net
- 2. Forza .NET Interop per utilizzare la DLL COM locale
- 3. registrazione com dll in wix
- 4. Debug C# dll dalla soluzione C++ tramite COM
- 5. Registrazione gratuita Com e dll manifesta
- 6. Utilizzare DLL in C senza lib
- 7. Utilizzo di tlbexp.exe su una DLL COM
- 8. Determina se una libreria COM (.DLL) è installata
- 9. Come utilizzare un. Assieme Netto in Delphi senza registrarlo in GAC o COM?
- 10. Utilizzare Visual Studio Setup Project per registrare automaticamente e GAC una DLL di interoperabilità COM
- 11. WiX: registro componente COM .NET sia x86 x64
- 12. Recupera COM ProgID da exe senza registrarlo
- 13. Come possiamo testare il nostro codice COM C++ senza registrare le DLL?
- 14. Perché le DLL Delphi utilizzano WideString senza utilizzare ShareMem?
- 15. Utilizzare l'assembly .NET senza bloccare il file dll
- 16. COM msado15.dll Il programma è stato arrestato
- 17. È possibile registrare un assembly .NET per l'interoperabilità COM senza aggiungere voci di registro?
- 18. utilizzando libcurl senza dll
- 19. C# .net COM dll rompe il riferimento con l'applicazione vb6
- 20. Crea un oggetto COM da un file senza regsvr32
- 21. Come trarre vantaggio dalla codifica dell'heap dalla DLL?
- 22. Come determinare se la DLL è COM o .NET?
- 23. Come verificare se una DLL COM è registrata in C#
- 24. Carica una DLL COM in fase di runtime?
- 25. Come registrare una DLL COM scritta in C# con Regsvr32?
- 26. Come possono C# utilizzare una DLL legacy semplicemente senza registrazione (regsvr32)
- 27. Ottenere il nome di una DLL dalla dll
- 28. Interop COM e gruppi dipendenti dipendenti senza registrazione
- 29. L'interoperabilità COM senza registri con C# è possibile?
- 30. .NET senza uso di DLL
@NahumLitvin, puoi dire quale libreria ti interessa in particolare? – acelent
Purtroppo non posso. l'informazione non è mia da dare. Ho una risposta. e un esempio funzionante con registrazione. ma non posso usare la registrazione. – Nahum
Perché non hai fatto una nuova domanda? Perché non puoi usare la registrazione senza COM (vedi una delle risposte)? Hai provato il metodo spiegato nell'altra risposta? Se non ha funzionato, in quale fase hai ricevuto un errore? In realtà, questo non riserva una taglia su una domanda già risposta, questa dovrebbe essere la sua domanda. È necessario fornire molti più dettagli se si vuole veramente aiuto, invece di lanciare semplicemente dei punti reputazione. – acelent