我有以下问题: 我在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'
答案 0 :(得分:0)
你能传入一个分隔字符串列表吗?像
这样的东西列出args = new List()
args.Add(“键:值);
e.g。 args.Add(“驱动程序:甲骨文);
答案 1 :(得分:0)
ACtiveX组件可能正在使用IDispatch
或IDispatchEx
方法将动态类型转换为属性名称列表,然后访问它们。
通过供应商或文档找到要传递的其他类型(也可以使用),或者您需要自己实现其中一个接口(System.Collections.Dictionary
没有)。
要尝试的另一件事是脚本Dictionary
类型(您需要导入正确的类型库以获取该类型)。