如何从COM对象(VB)中读取Visual C#2010中的变体类型

时间:2011-09-09 20:42:35

标签: c# com

我正在使用微软发布一段时间的FAXCOMEXLib示例,并尝试将其移植到C#。我在调用时遇到问题,该调用返回一个包含字符串数组的Variant类型。 “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);

3 个答案:

答案 0 :(得分:1)

一个简单的演员会做到这一点:

object objIDs = objFaxDocument.ConnectedSubmit(objFaxServer);
string[] IDs = (string[])objID;

答案 1 :(得分:1)

如果您知道它是一个字符串数组,只需将结果转换为字符串[]:

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]);

答案 2 :(得分:0)

如果您使用的是C#4.0,则应使用动态“类型”进行调查