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 还没有完成,但是我定义了 DllRegisterServerDllUnregisterServer 函数,它们在 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只显示一条下划线,并且背景透明?

如何在我的 C# Visual Studio 项目中添加 VC++ DLL 作为引用?

参考 c# Visual Studio