Est-il possible d'utiliser l'objet COM à partir de DLL sans enregistrer dans le code C++ non géré?Utiliser l'objet COM à partir de DLL sans registre
Répondre
Oui, s'il ne dépend pas de manière interne d'autres objets enregistrés.
- Vous
LoadLibrary
la DLL - Vous
GetProcAddress
sonDllGetClassObject
- Vous appelez
DllGetClassObject
pour obtenir le pointeurIClassFactory
pourCLSID
d'intérêt - Vous êtes bon d'aller avec
IClassFactory::CreateInstance
et instancier le coclasse
2 ½. Assurez-vous que vous êtes dans le bon appartement avant d'appeler 'DllGetClassObject'. Même ainsi, vous n'obtiendrez pas de marshaling pour les interfaces de modèle objet spécifiques. Même si les objets COM C++ implémentent 'IMarshal' ou' IProvideClassInfo' eux-mêmes, vous devrez faire la même chose si vous êtes celui fournissant des objets qui implémentent l'une de ces interfaces (par exemple dispinterfaces d'événements). Pour ces raisons et bien d'autres, c'est une mauvaise pratique. Vous devriez utiliser l'enregistrement gratuit COM à la place. – acelent
Vous pouvez créer des fichiers manifest pour la DLL et utiliser Registration-Free COM.
Disons que la DLL COM doit être enregistrée, mais que l'application ne dispose pas de droits d'accès administrateur. Voici un bidouille facile d'enregistrer la DLL sous HKEY_CURRENT_USER
, qui ne nécessite pas de droits d'administrateur:
- Utilisez
LoadLibrary
pour charger la DLL COM. - Appelez
GetGetProcAddress
pour obtenir l'adresse deDllRegisterServer
. - Appelez le
RegOverridePredefKey
pour rendre les redirections temporaires du registre:HKEY_LOCAL_MACHINE
àHKEY_CURRENT_USER
etHKEY_CLASSES_ROOT
àHKEY_CURRENT_USER\Software\Classes
. - Appelez le
DllRegisterServer
obtenu à l'étape 2. - Inversez les redirections du Registre.
- Utilisez le serveur COM comme d'habitude, il est maintenant enregistré sous
HKEY_CURRENT_USER
.
piratage "facile". Intelligent cependant. – Dmitry
- 1. C# Registre COM interop
- 2. Utilisation de COM dll dans VC++ dll
- 3. Introduction à COM DLL
- 4. Comment trouver une installation COM dll à partir de la DLL Interop
- 5. 64 bits dll registre
- 6. com: utiliser une DLL non enregistrée
- 7. Registre dll/tlb
- 8. Appel d'un C# .dll à partir de Ruby via COM
- 9. Comment appeler une DLL COM à partir de Sharepoint
- 10. Appelez la DLL C# à partir d'une application C++ non gérée sans COM
- 11. Comment faire C# COM DLL équivalent à ATL COM C++
- 12. Appelez COM avec COM interop dll
- 13. Comment déboguer le registre libre COM?
- 14. Utiliser l'interface COM sans liaison statique à la bibliothèque
- 15. Enregistrement de DLL à distance sans accès à HKEY_CLASSES_ROOT
- 16. COM dll n'enregistre plus
- 17. DLL registre dans ASP.NET
- 18. Utilisation de COM Interop pour utiliser une DLL
- 19. Comment obtenir l'accès au registre côté serveur à partir de l'objet COM instancié par php?
- 20. IIS 64bit Com dll
- 21. COM DLL - Icône de surimpression
- 22. Problème DLL (COM)
- 23. Problème DLL COM
- 24. Débogage InProc COM Dll
- 25. Appels COM à partir de plusieurs threads
- 26. COM Dll dépendance arbre
- 27. Débogage dans COM à partir de MSTest
- 28. Étapes exactes pour l'interopérabilité COM interop dans .NET (appel de la DLL COM copiée sans regsvr32)
- 29. Rendre une DLL COM accessible
- 30. Utiliser un dll COM non enregistré dans Classic ASP
@NahumLitvin, pouvez-vous dire quelle bibliothèque vous intéresse spécifiquement? – acelent
Malheureusement, je ne peux pas. l'information n'est pas à moi de donner. J'ai un com dll. et un exemple de travail avec enregistrement. mais je ne peux pas utiliser l'enregistrement. – Nahum
Pourquoi n'avez-vous pas fait une nouvelle question? Pourquoi ne pouvez-vous pas utiliser l'enregistrement gratuit COM (voir l'une des réponses)? Avez-vous essayé la méthode expliquée dans l'autre réponse? Si cela n'a pas fonctionné, à quelle étape avez-vous eu une erreur? Vraiment, cela ne réserve pas une prime sur une question déjà répondu, cela devrait être sa propre question. Vous devez fournir beaucoup plus de détails si vous voulez vraiment de l'aide, au lieu de simplement jeter des points de réputation. – acelent