首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >COM调用返回int而不是decimal

COM调用返回int而不是decimal
EN

Stack Overflow用户
提问于 2014-04-15 19:23:37
回答 1查看 114关注 0票数 1

我正在尝试从我的C#代码中调用旧的COM组件。该方法的签名如下所示。参数2、3和4是参考参数。

代码语言:javascript
运行
复制
  GetCOMData(UserId As Long, arraySummary As Variant, startDate As Variant, endDate As Variant)

有问题的位是参数2 (arraySummary)。遗留代码似乎在参数2中返回了一个变量数组,并且所有变量都具有不同的数据类型,如下所示。

代码语言:javascript
运行
复制
'                   Elements of arraySummary 
'                   0   -   int
'                   1   -   int 
'                   2   -   date 
'                   3   -   date
'                   4   -   decimal
'                   5   -   decimal
'                   6   -   decimal
'                   7   -   decimal

当COM调用完成并返回引用对象时,arraySummary的元素4-7似乎正在被截断,并被转换为整数而不是小数。

我的问题是:有没有办法明确地告诉Method.InvokeMember,我希望参数arraySummary的数组元素4-7有一个小数?

我调用COM对象的C#代码如下所示:

代码语言:javascript
运行
复制
 var parameters = new object[4];
        ParameterModifier p = new ParameterModifier(4);
        p[1] = true;
        p[2] = true;
        p[3] = true;
        ParameterModifier[] mods = { p };
        parameters[0] = UserID;
        Type t= Type.GetTypeFromProgID("ComDLL.COMClass");
        object comObj = Activator.CreateInstance(t);
        object recordSet = comObj .InvokeMember("GetCOMData", System.Reflection.BindingFlags.InvokeMethod, null, comObj , parameters, mods, null, null);
EN

回答 1

Stack Overflow用户

发布于 2014-04-16 05:38:12

我找到了我自己问题的答案,我使用的COM函数返回一个变量数组,C#天生就会尝试将变量的值转换为与其最接近的数据类型。

示例:下面是数组元素和C#可识别的相应类型的示例

Element# value C#将其识别为0 1 int 1 34 INT 2 24/1/2013 dateTime 3 1/1/2013 DateTime 4 1 INT (由于此no没有小数部分,C#认为它是一个整数)5 2.63十进制(识别为小数,因为这在小数点之后有一个值)

正如您在上面针对元素#4和元素#5所看到的,C#根据值将它们转换为不同的数据类型。这是非常有意义的(事后看来),因为C#无法找出实际的数据类型,因此无法做出最准确的猜测。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23082238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档