29.07.2003, 16:33 | #1 |
Участник
|
Как узнать зарегистрирован ли COM?
Как в Аксапта узнать зарегистрирован ли в системе объект COM по заданному имени, НЕ СОЗДАВАЯ при этом самого объекта. Может есть какая ф-ция WinAPI. Заранее благодарю.
|
|
30.07.2003, 09:15 | #2 |
Участник
|
Цитата из MSDN:
CLSIDFromProgID Looks up a CLSID in the registry, given a ProgID. HRESULT CLSIDFromProgID( LPCOLESTR lpszProgID, LPCLSID pclsid ); Parameters lpszProgID [in] Pointer to the ProgID whose CLSID is requested. pclsid [out] Pointer to the retrieved CLSID on return. Return Values S_OK The CLSID was retrieved successfully. CO_E_CLASSSTRING The registered CLSID for the ProgID is invalid. REGDB_E_WRITEREGDB An error occurred writing the CLSID to the registry. See "Remarks" below. Remarks Given a ProgID, CLSIDFromProgID looks up its associated CLSID in the registry. If the ProgID cannot be found in the registry, CLSIDFromProgID creates an OLE 1 CLSID for the ProgID and a CLSID entry in the registry. Because of the restrictions placed on OLE 1 CLSID values, CLSIDFromProgID and CLSIDFromString are the only two functions that can be used to generate a CLSID for an OLE 1 object. CLSIDFromProgID never triggers an automatic installation of missing classes. Requirements Windows NT/2000/XP: Requires Windows NT 3.1 or later. Windows 95/98: Requires Windows 95 or later. Header: Declared in objbase.h. Library: Use ole32.lib. Правда не знаю как на Axapta, но на С++ будет так PHP код:
|
|
31.07.2003, 14:54 | #3 |
Участник
|
Сам догадался.
просто нужно проверить, а есть ли нужный CLSID в реестре, используя средства Аксапта. вот пример метода, может кому понадобиться...
client protected boolean getRegisterCOMServer() { #WinAPI int handle; ; handle = WinAPI::regOpenKey(#HKEY_CLASSES_ROOT, "CLSID\\" + this.getCLSID(), #KEY_READ); if (!handle) return false; WinApi::regCloseKey(handle); return true; } |
|
|
|