将键值对传递给.NET中的COM方法

时间:2010-04-09 11:54:22

标签: c# com

我有以下问题: 我在C#中有一个项目,我使用第三方COM组件。

所以问题是上面的组件有一个方法,它接受一个字符串和一些键值对作为参数。我已经设法通过JavaScript调用该方法:

 var srcName
 srcName = top.cadView.addSource( 'Database', { driver : 'Oracle', host : '10.10.1.123', port : 1234, database : 'someSID', user : 'someuser', password : 'somepass' } )
 if ( srcName != '' )
 {
  ...
 }

......而且效果非常好。但是我不知道如何使用C#做同样的事情。我尝试将对传递为Dictionary和Struct / Class,但它会抛出“指定的强制转换无效”。例外。我也尝试过像这样使用Hashtable:

Hashtable args = new Hashtable();
args.Add("driver", "Oracle");
args.Add("host", "10.10.1.123");
args.Add("port", 1234);
args.Add("database", "someSID");
args.Add("user", "someUser");
args.Add("password", "samePass");

String srcName = axCVCanvas.addSource("Database", args);

虽然它没有抛出异常,但它仍然无法完成这项工作,将我写入日志文件

  

[错误] [14:38:33.281]   Cad :: SourceDB :: SourceDB():缺少   参数'driver'

2 个答案:

答案 0 :(得分:0)

你能传入一个分隔字符串列表吗?像

这样的东西

列出args = new List()

args.Add(“键:值);

e.g。 args.Add(“驱动程序:甲骨文);

答案 1 :(得分:0)

ACtiveX组件可能正在使用IDispatchIDispatchEx方法将动态类型转换为属性名称列表,然后访问它们。

通过供应商或文档找到要传递的其他类型(也可以使用),或者您需要自己实现其中一个接口(System.Collections.Dictionary没有)。

要尝试的另一件事是脚本Dictionary类型(您需要导入正确的类型库以获取该类型)。