首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateObject C#

CreateObject C#
EN

Stack Overflow用户
提问于 2015-04-25 06:03:29
回答 2查看 509关注 0票数 0

我已经有了一个本机代码COM对象,并试图从C#实例化它。Com在DCOM组件和注册表中注册。

,这就是我要做的:

代码语言:javascript
复制
public static void Main(string[] args)
{
    Type t = Type.GetTypeFromProgID("CaseConsole.Application");

    dynamic app = Activator.CreateInstance(t);
    dynamic c = app.Case;

    c.OpenCase("17-16", 0);
}

如果我尝试实例化com类型,则会得到以下内容:

代码语言:javascript
复制
NotImplementedException

命令被抛出一行:

代码语言:javascript
复制
dynamic c = app.Case;

当我在这一行设置一个断点时,我查看了"app“,错误已经出现了。

我查看了t类型,它显示: IsCOMObject = true

作为VBS它工作得很好:

代码语言:javascript
复制
Dim App
Dim c

Set App = CreateObject ("CaseConsole.Application")
Set c = App.Case

c.OpenCase "17-16", 0

作为VB.net,它工作于

代码语言:javascript
复制
Sub Main()
    Dim App
    Dim c

    App = CreateObject("CaseConsole.Application")
    c = App.Case

    c.OpenCase("17-16", 0)
End Sub

但不是在C#

对于C#示例,我查看了

http://www.codeproject.com/Articles/990/Understanding-Classic-COM-Interoperability-With-NE

https://msdn.microsoft.com/en-us/library/aa645736%28v=vs.71%29.aspx

Equivalent code of CreateObject in C#

我的猜测是我必须用InvokeMember或安全性来调用这些方法.

请您帮助使c#示例正常工作吗?

更新重命名为c,但这不是错误。

EN

回答 2

Stack Overflow用户

发布于 2015-04-25 07:46:31

您的C#程序与VBS和VB.NET程序有着微妙的不同。运行此代码的线程的单元状态不同。异常来自代理,应该解释为“不支持从工作线程运行此代码”。做得很好。修正:

代码语言:javascript
复制
[STAThread]
public static void Main(string[] args)
{
   // etc..
}

注意添加的STAThread属性。从技术上讲,这样做是不正确的,控制台模式的应用程序不能为单线程COM对象提供正确的运行时环境,但是如果VB.NET应用程序工作正常,那么您就没有什么好担心的了。如果您注意到死锁,那么您将知道该寻找什么。当您通过InvokeMember使用后期绑定时,它起了作用,因为它使用了IDispatch,而且它有一个不同的代理。

票数 0
EN

Stack Overflow用户

发布于 2015-04-25 06:33:03

非常感谢Sami Kuhmonen,解决办法是:

代码语言:javascript
复制
object c = t.InvokeMember("Case", BindingFlags.GetProperty, null, app, null);
t.InvokeMember("OpenCase", BindingFlags.InvokeMethod, null, c, new object[] { "17-16", 0 });

所以我没有意识到,“案件”是一种财产。

解决了

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29861627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档