如何在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);

如何在Visual c# 2010中从COM对象(VB)中读取变量类型

简单的强制转换就可以了:

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"