Visual studio 2010 tlbimp做什么而VisualStudioIDE不做什么? 我有一个用unman C++编写的COM DLL,用VS 2010编译。我可以使用regsvr32注册DLL,也可以通过VBscript调用它

Visual studio 2010 tlbimp做什么而VisualStudioIDE不做什么? 我有一个用unman C++编写的COM DLL,用VS 2010编译。我可以使用regsvr32注册DLL,也可以通过VBscript调用它,visual-studio-2010,com-interop,tlbimp,Visual Studio 2010,Com Interop,Tlbimp,在创建C客户机时,当我尝试添加对它的引用时,我没有看到在AddReference->COM选项卡中列出的COM对象。如果我手动浏览到DLL并尝试选择它,则表明该DLL不是有效的assemlby或COM组件 现在,我可以使用tlbimp工具生成一个互操作DLL,并将其作为对我的C客户机的引用添加。一切正常 我的问题是: 当原始COM通过regsvr32注册时,为什么未在“添加引用”对话框的“COM”选项卡中列出? 为什么VS IDE认为当我可以从VBScript和C++本地代码调用它时,它不是一个

在创建C客户机时,当我尝试添加对它的引用时,我没有看到在AddReference->COM选项卡中列出的COM对象。如果我手动浏览到DLL并尝试选择它,则表明该DLL不是有效的assemlby或COM组件

现在,我可以使用tlbimp工具生成一个互操作DLL,并将其作为对我的C客户机的引用添加。一切正常

我的问题是:

当原始COM通过regsvr32注册时,为什么未在“添加引用”对话框的“COM”选项卡中列出? 为什么VS IDE认为当我可以从VBScript和C++本地代码调用它时,它不是一个有效的COM? tlbimp究竟做了哪些IDE做不到的事情? 我需要进一步阅读什么来提高我对 类型库和互操作性在这里起作用?
看起来像是typelib问题-您的COM类可能已正确注册,但您的typelib可能未正确注册。也许您忘记从DllRegisterServer函数中调用RegisterTypeLib了

关于你的问题:

该对话框查找已注册的TypeLib,而不是COM类

VBscript调用IDispatch,不关心typelibs。tlbimp不关心IDispatch,需要类型库

您将DLL名称传递给了tlbimp,因此tlbimp知道如何获取类型库。相反,VS指的是缺乏适当注册数据的注册处