Gug*_*uge 2 c# com integration casting visual-foxpro
我有一个用Visual Fox Pro 9.0编写的COM对象.它有以下程序:
PROCEDURE GetArray(m.vcArrayName as String) as array
RETURN @&vcArrayName
Run Code Online (Sandbox Code Playgroud)
使用C#在VS2010项目中引用COM对象.C#中程序的签名是:
object GetArray(string vcArrayName);
Run Code Online (Sandbox Code Playgroud)
调试时,我可以看到返回的值是{object [1..1]},而类型是object {object []}.扩展变量,我可以看到它是一个基数1的数组,其中一个元素是一个空字符串("");
但是,我无法将此值转换为object [].我总是得到一个带有挪威语消息的InvalidCastException,说我无法将Object [*]强制转换为Object [].
奇怪的是,如果COM对象返回一个二维数组,我将它转换为对象[,]是没有问题的.我发现很奇怪两个维度比一个维度更容易处理!
我想回答的问题是:
什么是这个对象[*]业务?任何人都可以告诉我它是否是挪威异常消息中的错误翻译,或者对象[*]是否是某种我从未听说过的模糊C#语法?
您将获得一个维度为1而不是向量的多维数组.C#语言不允许您声明这样的数组.您可以使用Array类引用返回值,该类允许使用与此类似的代码进行转换:
public static object[] ConvertFoxArray(Array arr) {
if (arr.Rank != 1) throw new ArgumentException();
object[] retval = new object[arr.GetLength(0)];
for (int ix = arr.GetLowerBound(0); ix <= arr.GetUpperBound(0); ++ix)
retval[ix - arr.GetLowerBound(0)] = arr.GetValue(ix);
return retval;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |