现手头有一个活计,是VB调用了一个组件的示例,便现在我想用VC去调用,因为很多的代码是VC的。、
在VC中导入时出现如下提示
无法打开类型库文件:“d:\myworking\cs\rdbi\yhrtos\ntexec\phdata.dll”: 加载类型库/DLL 时出错
请问我该如何调用该组件,请大家帮想个法子吧。
VB调用代码
dim PHDObject as object
 Set PHDObject = CreateObject("VisualPHD.Data")
    PHDObject.HostName = "10.109.48.12"
    sTagName = "WI25616.PV"
    PHDObject.tags.Add sTagName
    PHDObject.SampleFrequency = lFrequency
    'PHDObject.SAMPLEMETHOD = sResample
    PHDObject.SAMPLEMETHOD = "SNAPSHOT"

解决方案 »

  1.   

    导入类型库,使用#import:
    #import "<your dll path>"
    确认<your dll path>是正确的路径,且就是“VisualPHD.Data”所在的DLL。
      

  2.   

    phdata.dll 是不是属于注册的 
    regsvr32 phdata.dll 
      

  3.   

    #import "phdata.dll" 如果有命名冲突,加上 no_namespace就可以了其实仿照vc中怎样调用ado 组件就可以了
      

  4.   

    1) phdata.dll应该和它的IDL文件一起发布吧(是这样的话就简单了,IDL文件有接口、方法、属性详细描述,你只要把phdata.dll和IDL文件加入到工程,编译就能自动产生.H和.C文件.....)
    2)如果没有,你先运行regsvr32 phdata.dll注册该COM,他既然能在VB里调用,那他就实现了IDispatch接口,VisualPHD.Data 为他的PROGID,我们就可以用IDispatch尝试调用它。IDispatch* pDis;
    CLSID clsid;
    CLSIDFromProgID(OLESTR("VisualPHD.Data"),&clsid);
    CoCreateInstance(&clsid,NULL,CLSCTX_INPROC,IID_IDispatch,(void**)&pDis);
    DISPID dispid;OLECHAR FAR* szMember = "ADD";
    OLECHAR FAR* szpro="HostName";pDis->GetIDsOfNames(  IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
    ..................
    ..................
    pDis->Invoke();