我一直使用VC6+ATL制作COM组件,有进程内形式的dll也有进程外形式的exe但在最终使用时,这些组件都必须和同名的.tlb文件放在一个目录下,客户端才能调用请问有什么办法将组件和它的tlb文件打包在一起,变成一个文件?有人说在组件的资源里加一句 IDR_TYPELIB1 typelib "MyCOM.tlb"但我试了不行:(困扰很久的问题,感激涕零
调试欢乐多
但我把组件的tlb文件删除后,客户端程序确实调用它失败呀:(
客户端也是用VC6写的
调用代码如下void CClientDlg::OnButtonComStart()
{
// TODO: Add your control notification handler code here
HRESULT hr = m_pExeCom.CreateInstance(_T("ExeTest.ExeCom.1")); //用ProgI的调用,用GUID调用也一样依赖tlb
if (FAILED(hr))
{
return;
}
}如果组件没有和tlb文件放在一起, hr就会返回错误我是用ATL做的组件,是不是ATL做的组件都是这样, 还是有什么设置?
注册了, 只要组件和tlb放在一起, 可以完全正常的使用
还有其他方式可以调用到com组件,如CoCreateInstance创建对应的对象..
在这一点上我没有异议现在的情况是在客户端和组件端两个程序都已经编译完成,且能够正常工作的情况下,只要删除了tlb文件,客户端的createInstance就返回失败