我有一组com组件,个数不定,接口是一样的,我现在想用一个程序来访问他们,在这个程序上动态生成相应的button来执行每个组件中的功能,请问如何实现。自认为这里的主要问题是如何动态调用com组件,之前有一些帖子解释了如何动态调用,但需要知道这个组件的guid,也请问如何才能知道一个组件中的guid是多少不知道我的描述是不是清楚,给出一定的思路也行,谢谢!

解决方案 »

  1.   

    function TDataBlockInterpreter.InternalCreateObject(const ClassID: TGUID): OleVariant;
    var
      Unk: IUnknown;
    begin
      OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
        CLSCTX_LOCAL_SERVER or CLSCTX_REMOTE_SERVER, IUnknown, Unk));
      Result := Unk as IDispatch;
    end;function TDataBlockInterpreter.CreateObject(const Name: string): OleVariant;
    var
      ClassID: TGUID;
    begin
      if (Name[1] = '{') and (Name[Length(Name)] = '}') then
        ClassID := StringToGUID(Name) else
        ClassID := ProgIDToClassID(Name);
      if CanCreateObject(ClassID) then
        Result := InternalCreateObject(ClassID) else
        raise Exception.CreateResFmt(@SObjectNotAvailable, [GuidToString(ClassID)]);
    end;
    -----------------------------------
    使用CreateObject(ProgID)即可。
      

  2.   

    楼上老兄,CanCreateObject这是什么函数呀,编译不过去呀,请问需要引用什么单元才能运行,或者是你的代码没贴全?