【发布时间】:2023-04-02 10:30:01
【问题描述】:
我有一个 C# DLL 和一个 Visual Basic 6 DLL。
在 C# 中有一个数据类型为 Decimal 的字段 x。 在 VB6 中有一个数据类型为 Currency 的字段 y。
将 x 传递给 y 并返回的最佳方法是什么?
目前我将字段转换为 Double,但我不确定是否存在舍入含义。
更新 1:
根据有用的建议,这就是我的代码现在的样子:
public void FromVbToNet(long vb6curr)
{
decimal value = vb6curr / 10000;
}
问题是,当我尝试通过互操作从 VB6 调用它时,出现编译错误:
“函数或接口标记为受限,或函数使用 Visual Basic 不支持的自动化类型”
那么我该如何声明 vb6curr 呢? 字符串、对象、动态?
更新 2:
如果有人需要此作为参考,在进一步阅读后我想出了以下解决方案:
[return: MarshalAs(UnmanagedType.Currency)]
public decimal GetDecimalFromNetDll()
{
decimal value = ... // Read from database
return value;
}
public void SetDecimalInNetDll([MarshalAs(UnmanagedType.Currency)] decimal value)
{
// Save to database
}
我在 VB6 中使用 Currency 参数从我的非托管代码中调用这些,到目前为止一切正常。
【问题讨论】:
标签: c# vb6 interop decimal currency