0

我正在开发一些使用com库的代码。我正在尝试通过

Type t = Activator.CreateInstance("TypeID"); 

但我无法得到它一直的类型 = null。progid 已经浏览过 Ole / COM Wever,看来我确实输入正确。可能有什么问题?

4

3 回答 3

5

您是否传递了类型 ID 字符串?首先尝试从 ProgId 获取类型对象:

Type t = Type.GetTypeFromProgID(progID);
object obj = Activator.CreateInstance(t);
于 2012-03-20T13:37:37.117 回答
0

我想附加到 Strillo 的答案,但我没有添加评论所需的声誉。

在我手动注册 COM dll 之前,我得到了与 shtpavel 相同的行为。一旦我注册了 COM dll,Strillo 的回答就对我有用。

regasm /tlb /codebase project.dll

Regasm 可以在以下位置找到:

C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/RegAsm.exe

项目设置视图的 Build 选项卡,在 Output 标题下有一个“Register for COM interop”复选框。我已经向自己证明了这确实注册了 COM dll,但是在我使用上述命令手动注册 dll 之前,Strillo 的回答对我不起作用。

RegAsm - /codebase 选项何时适用?声明 Visual Studio 的“注册 COM 互操作”复选框与我的命令行解决方案相同。但我的经验是,最初“注册 COM 互操作”是不够的。不知道为什么。

于 2016-09-02T22:36:29.747 回答
-2

问题是Activator不能用于以这种方式实例化 COM 对象(编辑:我现在强调这一点,因为我从您的问题中了解到您将 GUID 直接传递给Activator.CreateInstance)。

通常您添加对已注册 COM 类的引用(通过“添加引用”对话框的“COM”选项卡)。然后,您可以像使用任何其他类一样使用 COM 类。

或者你试试 Strillo 说的 :-)

但是,按照我建议的方式进行操作具有仍然保持强类型的优势。

于 2012-03-20T13:38:13.357 回答