如何在Visual c# 2010中从COM对象(VB)中读取变量类型
本文关键字:VB 读取 类型 变量 对象 COM Visual 中从 2010 | 更新日期: 2023-09-27 18:08:14
我正在使用微软发布的FAXCOMEXLib示例,并试图将其移植到c#。我遇到了一个调用,返回一个变体类型,其中持有一个字符串数组的麻烦。"jobID = objFaxDocument.ConnectedSubmit(objFaxServer);"
过程返回一个显示"System.String[]"的消息框。我似乎回忆起与Delphi一起工作,它也使用变体,变体的一个属性只是一个字符串,它显示了它存储的内容。也许这就是正在发生的事情。但无论如何,我如何得到这个字符串数组并将其转换为c#可以理解的东西?
感谢引用:
http://support.microsoft.com/kb/317030(展示如何从VB6返回一个变体)http://msdn.microsoft.com/en-us/library/ms692936(v=VS.85).aspx(以FAXCOMEXLib为例)
FAXCOMEXLib.FaxDocument objFaxDocument = new FAXCOMEXLib.FaxDocument();
FAXCOMEXLib.FaxServer objFaxServer = new FAXCOMEXLib.FaxServer();
object jobID;
try {
//Connect to the fax server
objFaxServer.Connect("");
// skipping some code, see MS example in URL above
jobID = objFaxDocument.ConnectedSubmit(objFaxServer);
MessageBox.Show("The Job ID is :" + jobID);
简单的强制转换就可以了:
object objIDs = objFaxDocument.ConnectedSubmit(objFaxServer);
string[] IDs = (string[])objID;
如果您知道它是字符串数组,只需将结果强制转换为string[]:
string[] jobID = (string[]) objFaxDocument.ConnectedSubmit(objFaxServer);
MessageBox.Show("The Job ID is: " + jobID[0]);
可能传入的数据实际上是一个不同对象类型的数组(即异构数组)。在这种情况下,这将工作(假设第一个元素确实是一个字符串):
object[] jobID = (object[]) objFaxDocument.ConnectedSubmit(objFaxServer);
MessageBox.Show("The Job ID is: " + (string)jobID[0]);
如果你正在使用c# 4.0,你应该研究使用动态 "type"