各位好:
    我有一个com组件,是使用delphi写的。但我需要在VC环境下使用这个组件。根据我所查得的资料,在VC下使用这个组件,是需要delphi所生成的IDL文件来生成对应的.H和.C文件的。但我目前没有这个文件,请问在VC环境下使用时,我是否需要这个idl文件,如果不需要,我在在VC下使用这个com组件,该如何使用
    菜鸟一个,请多多关照。

解决方案 »

  1.   


    印象:
    很久没有看com了,vc里好像用#import指令直接可以引入com组件。
      

  2.   

    com组件是语言无关的,不需要idl文件重新编译。
    在vc下使用用delphi制作的com,需要:
    1 注册该组件;
    2 知道该组件的uuid;
    3 就可以用CoCreateInstance()等函数来创建一个该组件的实例。
      

  3.   

    如果我直接引入这个空间,对应的IID之类的东西是否需要自己去注册表里面查
      

  4.   

    com 和语言无关是因为使用了 idl 文件,如果你没有你怎么知道com提供了什么样的接口呢
      

  5.   

    to lcp(dupi):
       你好!多谢您的解答,但是我没有函数的原型,在VC环境下调用ACTIVEX控件,需要对应的函数原型,请问怎么解决
      

  6.   

    如果你在VC中调用 ActvieX,应该已经生成了相应的 class, 你直接用class就好了呀?
      

  7.   

    to DoubleJiang(Double):
       您好,我程序中本身并没有ACTIVEX控件。我是调用别人已经用DELPHI写好的COM控件,对方只给了我一个com编写的.dll文件。所以么 :(
      

  8.   

    1.Regsvr32.exe 注册你的*.dll
    2.用oleview查出注册的com的类和接口的GUID:  CLSID_YouClass和IID_YouIID的GUID.
    3.用const IID IID_YouIID = {............com对象GUID..........}
    和 const CLSID CLSID_YouClass = {...............接口GUID........}
    4.hr = CoCreateInstance(.......)
    hr成功后就可使用了。
      

  9.   

    多谢ldsjlzy(小李) 的回答,第三步能不能说清楚些。
      

  10.   

    第3步应该是说:
    你需要知道这个com的class ID 和 interface ID -- 128位的整数;
    然后把这两个数定义成易于理解的IID_YouIID和CLSID_YouClass常数,方便程序中使用。最好是能够得到这个dll的接口定义文件,这样你能知道如何调用这个COM;
    如果没有,就用VC的工具oleview来查看com的接口吧。
      

  11.   

    to  lcp(dupi):
       谢谢你的回答。根据我刚才所查看的资料,其实idl文件就是oleview中可以看到的部分。
    根据这个,我已经生成了对应的idl文件。再根据这个文件,我生成了对应的.h和.c文件,现在除了调用函数有问题之外,其他问题都已经解决了