只有“*.tlb”文件,没有*.lib,*.h,*.dll,怎么将*.tlb 加载到VC环境下使用?
有该tlb的接口函数说明文档。已经做
#import "*.tlb" raw_interfaces_only rename_namespace("**_FC") named_guids 
但是在代码进行注册: CComPtr<I***>  IAAA; 
HRESULT hr = IAAA.CoCreateInstance(SAL_FC::CLSID_***); 
if(FAILED(hr)) 

ATLTRACE("CoCreateInstance failed hr %#x", hr); 
return ; 

提示“I***”没有定义。只有*.tlb 文件可以在VC中使用该接口函数吗?

解决方案 »

  1.   

    可以.你可以使用vc工具ole viewer查看接口函数.
    程序中使用时使用#import导入类型库(tlb).
      

  2.   

    #import "Name.tlb"或者有DLL也可以#import "Name.dll"
      

  3.   

    #import "*.tlb" 
    是可以的,你看看是不是接口写错了,或是namespace错了
      

  4.   

    谢谢上面的几位。现在通过tlb生成了,对应的类的.h 文件。编译没有错误。但是执行,一直是CoCreateInstance 不成功
    CoInitialize(NULL);
    IName spName;
    HRESULT hr = ::CoCreateInstance( __uuidof(IName ), NULL, CLSCTX_ALL, __uuidof(IName ), (void**)&spName);
    if(FAILED(hr)) 
    {
       //REGDB_E_CLASSNOTREG(0x80040154)
       ATLTRACE("CoCreateInstance failed hr %#x", hr); 
       return ; 
    }错误代码为 CoCreateInstance failed hr 0x80040154请问是什么原因? 
    虽然通过Import的方式加载了tlb文件,但是不知道怎么像 dll文件一样可以通过regsvr32注册。目前的问题可能是没有注册。但是因为只有tlb文件,没有dll和lib文件,不知道怎么注册?谢谢!
      

  5.   

    现在已经注册了tlb ,但是仍然提示上面的错误。
      

  6.   

    试试这样:
    IName *spName; //这里要用指针,你忘加*
    HRESULT hr=CoCreateInstance(__uuidof(Name),NULL,CLSCTX_ALL,__uuidof(IName),(void**)&spName);
    //第一个参数用__uuidof(Name),而不是__uuidof(IName)
      

  7.   

    你用IName spName,意思可能想用智能指针,我也初学懂的不多,给你个参考
    #import "*.dll" no_namespace //你的.dll文件CoInitialize(NULL);
    try {
    INamePtr spName(__uuidof(Calc));
    spName->Fun(); //调用Name中的函数
    spName.Release(); //这个我也不太懂,好像有没有这行都行,谁给个标准
    }
    catch(_com_error &e) {
    cout<<e.ErrorMessage()<<endl;
    }
    CoUninitialize();
      

  8.   

    INamePtr spName;
    HRESULT hr=spName.CreateInstance((__uuidof(Name));