客户端调用COM接口不能用CreateOleObject('AAA.BBB') as IMyCOM(200分)

  • 主题发起人 主题发起人 pizilai
  • 开始时间 开始时间
P

pizilai

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端调用COM接口不能用a := createoleobject('MyCOM.MyCOMTest') as IMyCOMTest;
来取得接口呢?并出现错误:“不支持此接口”
class_Id: TGUID = '{CE38847E-A386-4753-89F1-34BE80042107}';
但是用a := createcomobject(class_Id) as IMyCOMTest;可以正常运行。
 
当然,,主要原因
CreateComobject调用COM对象,当然可以包含OLE对象。自动化对象,ACTIVX对象。

CreateOleObject范围比较窄,只能调用从IDispatch继承的对象,,也就是OLE,自动化对象。
使用什么调用,考虑你的服务程序如何了。
原形:
function CreateComObject(const ClassID: TGUID): IUnknown;
begin
OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IUnknown//看看这里, Result));
end;
---
看看这个
function CreateOleObject(const ClassName: string): IDispatch;
var
ClassID: TCLSID;
begin
ClassID := ProgIDToClassID(ClassName);//类转换成CLSID
OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IDispatch//原形, Result));
end;

IDispatch = interface(IUnknown)
['{00020400-0000-0000-C000-000000000046}']
function GetTypeInfoCount(out Count: Integer): HResult;
stdcall;
function GetTypeInfo(Index, LocaleID: Integer;
out TypeInfo): HResult;
stdcall;
function GetIDsOfNames(const IID: TGUID;
Names: Pointer;
NameCount, LocaleID: Integer;
DispIDs: Pointer): HResult;
stdcall;
function Invoke(DispID: Integer;
const IID: TGUID;
LocaleID: Integer;//调用
Flags: Word;
var Params;
VarResult, ExcepInfo, ArgErr: Pointer): HResult;
stdcall;
end;
 
还是有点晕
 
还把DCOMM服务端在客户机中注册(运行)一次,以便注册实现远程的COM+接口
 
如果不是你名字写错了,??
 
'MyCOM.MyCOMTest'
楼上说的对,你可能通过名称调用,调用名称不对,失败了。
 
Very Good ,接受答案,不错!
 
后退
顶部