COM。 C#创建com-object类型

时间:2012-03-20 13:33:09

标签: c# com activator

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

创建一个类的实例
Type t = Activator.CreateInstance("TypeID"); 

但是我不能一直得到它的类型= null。 progid已经通过Ole / COM Wever查看,似乎我确实输入了它。 在什么可能是prolem?

3 个答案:

答案 0 :(得分:5)

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

Type t = Type.GetTypeFromProgID(progID);
object obj = Activator.CreateInstance(t);

答案 1 :(得分:0)

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

我得到了与shtpavel相同的行为,直到我手动注册了COM dll。一旦我注册了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 - When is the /codebase option applicable?声明Visual Studio"注册COM互操作"复选框与我的命令行解决方案相同。但我的经验是,最初是"注册COM互操作"还不够。不知道为什么。

答案 2 :(得分:-2)

问题是Activator不能用来实例化一个COM对象 编辑:我现在正在强调这一点,因为我从你的问题中了解到你'将GUID直接传递给Activator.CreateInstance )。

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

或者你试试Strillo说的话: - )

但是,按照我建议的方式做我的优点仍然是保持强类型。