Visual C# - 参考 > 添加参考... > COM:该列表是如何填充的?
Posted
技术标签:
【中文标题】Visual C# - 参考 > 添加参考... > COM:该列表是如何填充的?【英文标题】:Visual C# - References > Add Reference... > COM: How is that list populated? 【发布时间】:2013-07-01 04:14:25 【问题描述】:我正在尝试在 Visual C++ 2010 (Express) 中开发一个 COM 组件,我希望能够从 Visual C# 2010 (Express) 程序中使用它。
我的 COM DLL 还没有完成,但是我定义了 DllRegisterServer 和 DllUnregisterServer 函数,它们在 HKEY_CLASSES_ROOT 和子键中写入了很多东西。其中,我有以下键:
HKEY_CLASSES_ROOT\My.Components.1\CLSID
Default Value: DB05EA30-0320-4D40-A530-6DEAD03D3850
HKEY_CLASSES_ROOT\CLSID\DB05EA30-0320-4D40-A530-6DEAD03D3850
Default Value: My Components
Sub Key: InprocServer32
Default Value: Absolute path of the .dll
Threading Mode: Apartment
Sub Key: ProgID
Default Value: My.Components.1
Sub Key: TypeLib
Default Value: DB05EA31-0321-4D41-A531-6DEAD03D3851
Sub Key: Version
Default Value: 1.0
HKEY_CLASSES_ROOT\TypeLib\DB05EA31-0321-4D41-A531-6DEAD03D3851
Sub Key: 1.0
Sub Key: 0
Sub Key: win32
Default Value: Absolute path of the .tlb
Microsoft JScript 可以尝试实例化 COM 对象,但由于工厂不完整,所以所做的只是输出 DllGetClassObject 的错误代码。
另一方面,Visual C# 2010(或至少“添加引用...”窗口)似乎没有注意到已注册 COM 对象的存在,该对象未显示在列表中。我很清楚这些对象只是已安装 COM 对象的一个子集。
COM 对象会在什么时候出现?我错过了什么?
编辑
我知道 Browse 选项卡,但我的印象是 first-class 注册的 COM 对象应该在没有明确搜索它们的情况下显示,但也许事实并非如此。
【问题讨论】:
您可以使用进程监视器来跟踪 VS 在填充列表时执行的注册表访问。 很有趣,我以后可能会试试这个。感谢您的评论。 【参考方案1】:Sub Key: 1.0
必须先分配此键的默认值,然后类型库才能显示在 COM 选项卡中。它必须包含类型库的描述。样板短语是“Acme Foo Type Library 1.0”,其中“Acme”是您的公司名称,“Foo”是服务器或产品名称。
使用浏览选项卡是我的重中之重,COM 选项卡太慢了。你会发现:)
【讨论】:
先生,您说得对。非常感谢你的帮助。我模仿了现有条目的结构,但没有注意到版本键上的默认值。你做到了,我真的很感动。顺便说一句,FLAGS 不是必需的。我仍然无法导入我的对象,我收到一个错误“无法注册 ActiveX 类型库”,但我知道 DLL 仍然有问题。如果我可以问,您建议学习 COM/OLE/ActiveX 什么?我在哪里可以找到有关 COM 注册的所有这些详细信息? 这些不是我所知道的详细记录的那种细节。无论如何,大多数 COM 书籍都已绝版。硬敲门学校和SO是很好的资源。我在那所学校上学。以上是关于Visual C# - 参考 > 添加参考... > COM:该列表是如何填充的?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2008 中的 C# 项目中的 C++ 项目参考
如何从 Visual Studio C# 使用 Office?
在 Visual Studio Ultimate 2010 中添加 MySQL.Data 作为参考
visual C#中如何设置textbox只显示一条下划线,并且背景透明?