使用System :: DateTime参数调用C++/CLI方法需要'ValueType'作为参数?

Dav*_*sen 9 c# datetime types c++-cli

我试图用C#调用用C++/CLI编写的方法.C++/CLI代码用于更新TIMESTAMPOracle数据库中的列,给定记录ID和System::DateTimeOracle TIMESTAMP类型的.NET兼容数据类型的对象.

我调用的方法有以下原型:

bool ChangeJobUpdateDate (int jobIdIn, System::DateTime^ updateDateIn)
Run Code Online (Sandbox Code Playgroud)

我在我做的测试项目中添加了对这个DLL项目的引用; 我正在用C#编写测试.但是,当我尝试从C#单元测试项目调用此方法时,该函数似乎具有以下方法声明(通过intellisense):

bool ChangeJobUpdateDate (int jobIdIn, ValueType updateDateIn)
Run Code Online (Sandbox Code Playgroud)

我当然不熟悉C++/CLI,所以有什么我想念的吗?

Jon*_*eet 12

我怀疑这是因为你使用DateTime^而不仅仅是DateTime.它是一种值类型,那么为什么要尝试使用引用呢?

C#没有任何方式来表示与值类型相关联的盒装引用类型,所以它能做的最好的是ValueType- 我怀疑是发生了什么,尽管由于我缺乏C++经验,我无法肯定地说.试着DateTime看看它看起来如何......

  • 这就是它.C++/CLI实际上将值的实际类型编码到签名中 - 在这种情况下,在IL中,完整类型将是:`class [mscorlib] System.ValueType modopt([mscorlib] System.DateTime)modopt([mscorlib] ] System.Runtime.CompilerServices.IsBoxed)` - 这是C++/CLI编译器以后知道正确类型并将进行适当的类型检查的方法 - 但C#只是忽略所有`modopt`并将其视为普通的`ValueType`. (3认同)