AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.07.2003, 16:33   #1  
ni is offline
ni
Участник
 
5 / 10 (1) +
Регистрация: 18.06.2003
Адрес: msk
? Как узнать зарегистрирован ли COM?
Как в Аксапта узнать зарегистрирован ли в системе объект COM по заданному имени, НЕ СОЗДАВАЯ при этом самого объекта. Может есть какая ф-ция WinAPI. Заранее благодарю.
Старый 30.07.2003, 09:15   #2  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
Цитата из 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 код:
#include "stdafx.h"
#include <objbase.h>
#include <stdio.h>

int main(int argccharargv[])
{
    
    
LPCOLESTR lpStr=L"Excel.Application";
    
CLSID  findCLSID;

    
HRESULT hr=CLSIDFromProgID(lpStr,&findCLSID);
    if(
FAILED(hr))
        
printf("Error %x\n",hr);

    return 
0;

Старый 31.07.2003, 14:54   #3  
ni is offline
ni
Участник
 
5 / 10 (1) +
Регистрация: 18.06.2003
Адрес: msk
Сам догадался.
просто нужно проверить, а есть ли нужный 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;
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kurt Hatlevik: Sneak preview of the WMS E&E Blog bot DAX Blogs 0 20.11.2008 01:10
msdynamicsax: VB script that test the com connector for Dynamics Ax 4.0 Blog bot DAX Blogs 0 25.08.2008 18:05
Dynamics AX: MSDynamicsWorld.com Names Five Dynamics Experts to Newly Formed Editorial Advisory Board Blog bot DAX Blogs 0 13.08.2008 01:05
Solutions Monkey: Enterprise Portal Screencasts at Channel9.msdn.com Blog bot DAX Blogs 6 01.07.2008 19:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:08.