gpt4 book ai didi

c# - 如何通过 CLSID 在 C# 中实例化 COM 对象?

转载 作者:行者123 更新时间:2023-11-30 13:23:02 24 4
gpt4 key购买 nike

如果我的术语不对,请原谅我,因为这对我来说有点未知。

我有一个程序需要创建一个FolderShortcutMicrosoft has documentation关于如何在 C++ 中创建它,我正在尝试将说明转换为 C#。说明说明需要使用 CLSID_FolderShortcut 作为参数调用 CoCreateInstance 函数,我推断这意味着它正在实例化 COM 对象。此对象的 CLSID 是 {0AFACED1-E828-11D1-9187-B532F1E9575D}

我已经尝试从 COM 选项卡添加对 Shell32.dll 的引用,但是 FolderShortcut 对象没有出现在 Intellisense 中(可能它不在类型库中) ?)。我也考虑过做一个 DLLImport,但是,当然,这只能让我访问函数,而不是对象。

我需要做什么才能在 .Net 中访问此对象?

最佳答案

如果您不想在编译时导入类,如 Simon Mourier 所述,也可以使用 Activator 对 COM 对象进行一些后期绑定(bind)。 .

如果您有对象的 ProgID,请使用以下方法获取类型

Type comType = Type.GetTypeFromProgID("MyProg.ProgId");

否则你可以通过它的CLSID获取类型:

Type comType = 
Type.GetTypeFromCLSID(new Guid("0AFACED1-E828-11D1-9187-B532F1E9575D"));

使用此类型,您现在可以使用 Activator.CreateInstance 创建 coclass 的实例:

var instance = Activator.CreateInstance(comType);

基本上,您现在可以使用 Type.InvokeMember 调用方法.这仅在对象实现 IDispatch 时有效界面。

但是对于您的特定示例,您应该能够将实例转换为 System.Runtime.InteropServices.ComTypes.IPersistFile ,这会导致调用 COM 对象的 QueryInterface。使用此接口(interface),您可以轻松访问 IPersistFile 的成员。

您可以继续here进一步阅读。

关于c# - 如何通过 CLSID 在 C# 中实例化 COM 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com