只有“*.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中使用该接口函数吗?
有该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中使用该接口函数吗?
程序中使用时使用#import导入类型库(tlb).
是可以的,你看看是不是接口写错了,或是namespace错了
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文件,不知道怎么注册?谢谢!
IName *spName; //这里要用指针,你忘加*
HRESULT hr=CoCreateInstance(__uuidof(Name),NULL,CLSCTX_ALL,__uuidof(IName),(void**)&spName);
//第一个参数用__uuidof(Name),而不是__uuidof(IName)
#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();
HRESULT hr=spName.CreateInstance((__uuidof(Name));