Registrien von COM-Objekten [DllRegisterServer]
-
Ich schreibe mir grad meine eigenen Komponenten und komme bei folgendem nicht weiter:
Um die COM-Objekte in der DLL zu nutzen muss ich sie auch registrieren (wegen der CLSID nehm ich an
). Ich hab die Funktionen implementiert, und regsvr32.exe gibt keinen Error zurück. Deshalb glaube ich auch, dass mein Code zum Registrieren falsch ist..Der Code ist ursprünglich nicht von mir, ich hab ihn nur etwas abgeändert. Weiß irgendwer, wie man eine Komponente auf diese Weise richtig registrieren kann (oder ist das Beispiel vllt. doch richtig
).HRESULT RegisterServer(void) { TCHAR *lpwszClsid; //TCHAR szBuff[MAX_PATH]={0}; //TCHAR szClsid[MAX_PATH]={0}, szInproc[MAX_PATH]{0},szProgId[MAX_PATH]={0}; //TCHAR szDescriptionVal[256]={0}; TSTRING szBuff; TSTRING szClsid, szInproc, szProgId; TSTRING szDescriptionVal; StringFromCLSID(CLSID_IComponent, &lpwszClsid); szClsid.append(lpwszClsid); /// "CLSID\\{GUID}\\InProcServer32" szInproc.append(L"clsid\\"); // INPROC - STRING // szInproc.append(szClsid); szInproc.append(L"\\"); szInproc.append(L"InProcServer32"); /// "CLSID\\{GUI}\\ProgId szProgId.append(L"clsid\\"); /// PROGID - STRING // szProgId.append(szClsid); szProgId.append(L"\\ProgId"); //wsprintf(szProgId,"%s\\%s\\%s","clsid",szClsid,"ProgId"); // //write the default value // szBuff.append(L"COM-Objects"); //wsprintf(szBuff,"%s","Fast Addition Algorithm"); //// Description: "CLSID\\{CLSID} szDescriptionVal.append(L"clsid\\"); szDescriptionVal.append(szClsid); //wsprintf(szDescriptionVal,"%s\\%s","clsid",szClsid); HelperWriteKey ( HKEY_CLASSES_ROOT, szDescriptionVal.c_str(), NULL,//write to the "default" value REG_SZ, (void*)szBuff.c_str(), szBuff.size() ); // //write the "InprocServer32" key data // szBuff.clear(); GetModuleFileName( g_hModule, (LPWCH)szBuff.c_str(), szBuff.size()); HelperWriteKey ( HKEY_CLASSES_ROOT, szInproc.c_str(), NULL,//write to the "default" value REG_SZ, (void*)szBuff.c_str(), szBuff.size() ); // //write the "ProgId" key data under HKCR\clsid\{---}\ProgId // szBuff.assign(AddObjProgId); HelperWriteKey ( HKEY_CLASSES_ROOT, szProgId.c_str(), NULL, REG_SZ, (void*)szBuff.c_str(), szBuff.size() ); // //write the "ProgId" data under HKCR\CodeGuru.FastAddition // szBuff.assign(L"COM-objects"); HelperWriteKey ( HKEY_CLASSES_ROOT, AddObjProgId, NULL, REG_SZ, (void*)szBuff.c_str(), szBuff.size() ); szProgId.assign(AddObjProgId); szProgId.append(L"\\CLSID"); HelperWriteKey ( HKEY_CLASSES_ROOT, szProgId.c_str(), NULL, REG_SZ, (void*)szClsid.c_str(), szClsid.size() ); return 1; }danke für eure Antworten!

-
ich hätte auch noch ein registry "makefile":
REGEDIT HKEY_CLASSES_ROOT\HAWKlibraries.Component.1 = HAWKlibraries Component Version 1.0 HKEY_CLASSES_ROOT\HAWKlibraries.Component.1\CLSID = {5a749fa8-240a-400e-802b-42c6c9b3877f} HKEY_CLASSES_ROOT\HAWKlibraries.Component = HAWKlibraries Component HKEY_CLASSES_ROOT\HAWKlibraries.Component\CurVer = HAWKlibraries.Component.1 HKEY_CLASSES_ROOT\CLSID\{5a749fa8-240a-400e-802b-42c6c9b3877f} = HAWKlibraries Component 1.0 HKEY_CLASS_ROOT\CLSID\{5a749fa8-240a-400e-802b-42c6c9b3877f}\InprocServer32 = C:\Dokumente und Einstellungen\Administrator\Desktop\TestCom\WinCOM\Debug\WinCOM.dll HKEY_CLASSES_ROOT\CLSID\{5a749fa8-240a-400e-802b-42c6c9b3877f}\ProgID = HAWKlibrariest.Component.1 HKEY_CLASSES_ROOT\CLSID\{5a749fa8-240a-400e-802b-42c6c9b3877f}\VersionIndependentProgID = HAWKlibraries.Component
-
habs selber rausgefunden (entschuldigt die selbstgespräche
):um ein COM-Objekt zu registrieren sollte man folgende Werte festlegen:
HKEY_CLASSES_ROOT
----- <Programm.Komponente.Version> [DESCR]*
---------CLSID --> default-Wert = CLSID (Typ: REG_SZ)*HKEY_CLASSES_ROOT
--------CLSID
---------{CLSID der Komponente } [DESCR] *
-------------InprocServer32 ---> default-Wert = Pfad + Name der DLL *
-------------ProgId ---> default-Wert = <Programm.Komponente.Version> *Alle mit * versehenen Schlüssel müssen erstellt und gefüllt werden, dazu nimmt man RegSetEx und RegCreateEx. mit ner .reg datei ginge es natürlich auch.
DESCR heißt, dass der default-Wert des Unterordners eine Beschreibung enthalten darf.