In meiner DllRegisterServer-Methode meiner COM-DLL hatte ich zuvor Code, der LoadTypeLibEx (Modul, REGKIND_REGISTER, & pTypeLib) angerufen, um meine COM-Klassen und ihre entsprechenden TypLibs zu registrieren. Meine COM-DLL ist ein 64-Bit. Ich habe bemerkt, dass auf meinem 64-Bit-Vista-System, unter HKCR: \\ TypeLib \ {myguid} \ 1.0 \ 0 Ich finde einen Win32-Unterschlüssel mit dem Speicherort meiner COM-DLL.Was ist der Unterschied zwischen dem Aufruf von CComModule.RegisterServer, _AtlComModule.RegisterServer und LoadTypeLibEx für die TypLib-Registrierung?
Ich habe auch einige andere Code in einer separaten COM DLL, die ich unterstütze, die den älteren, jetzt veralteten CComModule.RegisterServer (TRUE) Aufruf verwendet. Dieser Code erstellt einen Win64-Unterschlüssel unter der 0-Taste für eine 64-Bit-DLL und einen Win32-Unterschlüssel unter der 0-Taste für eine 32-Bit-DLL. Ich benutze die korrekte Bit-Version von Regsvr32, um die Registrierung in allen Fällen durchzuführen (die Regsvr32-Bitness mit DLL-Bitness übereinstimmen).
Warum erstellen LoadTypeLibEx und _AtlComModule.RegisterServer nicht den Schlüssel win64 für eine 64-Bit-DLL, die meine TypeLib enthält, während der ältere CComModule.RegisterServer die richtigen Schlüssel erstellt?
"win64" ist nicht korrekt. Ist es in Ihrer .rgs-Datei? –
Es ist nicht in meiner Rgs-Datei. Windows macht es mit einigen seiner eigenen Typbibliotheken (zumindest sehe ich das unter Vista x64). Sehen Sie sich zum Beispiel HKEY_CLASSES_ROOT \ TypeLib \ {DCB00D01-570F-4A9B-8D69-199FDBA5723B} \ 1.0 \ 0 an, darunter sollte sich ein win64-Unterschlüssel befinden. – Zach
Oder für einen, der die Unterschlüssel win32 und win64 hat: HKEY_CLASSES_ROOT \ Wow6432Node \ TypeLib \ {11DD5EA9-F8DB-4F6E-BF7C-6AADBA404A3D} \ 1.0 \ 0. Ich würde gerne wissen, warum das gemacht wird. – Zach