CreateCOMObject如何判断a.ocx是否注册
这个是DELPHI的代码,想翻译成BCB,无奈第二句就过不去了。
procedure TForm1.Button1Click(Sender: TObject);
var
clsID: TGUID;
obj: IUnknown;
begin
CLSIDFromProgID('test.test', clsID);
obj:= CreateCOMObject(clsID);
if obj <> nil then
ShowMessage('registered')
else
ShowMessage('not registered');
end;
翻译:
procedure TForm1.Button1Click(Sender: TObject);
{
TGUID clsID;
IUnknown obj;//这里就不对了
。。。。
}
我是想问问如何判断是否注册,不是问如何注册。
1、test.test这个是什么意思,是a.ocx文件的ProgID吗?
2、我手动注册了a.ocx,然后没有反注册,直接把a.ocx文件删除了,用CreateCOMObject的方法能否判断a.ocx是否注册成功了。
[解决办法]
1. test.test是ProgID
2. 如果把.ocx文件删除,创建COM对象可能会失败。
3. 这段代码翻译过来,大概是这个样子:
#include <comobj.hpp>#include <objbase.h>void __fastcall TForm1::Button1Click(TObject *Sender){ GUID clsID; IUnknown *obj; CLSIDFromProgID(L"test.test", &clsID); obj = CreateComObject(clsID); ShowMessage(obj? "registered": "not registered");}
[解决办法]
未注册CreateComObject会引发异常错误,用Exception捕捉异常吧