Estoy intentando llamar a un método escrito en C++/CLI desde C#. El código C++/CLI se utiliza para actualizar una columna TIMESTAMP
en una base de datos Oracle, con un ID de registro y el objeto System::DateTime
, que es el tipo de datos compatible con .NET para el tipo TIMESTAMP
de Oracle.Llamando al método C++/CLI con sistema :: ¿El parámetro DateTime requiere 'ValueType' como parámetro?
El método que yo estoy llamando tiene el siguiente prototipo:
bool ChangeJobUpdateDate (int jobIdIn, System::DateTime^ updateDateIn)
He añadido una referencia a este proyecto DLL en un proyecto de prueba que hice; Estoy escribiendo las pruebas en C#. Sin embargo, cuando trato de llamar a este método desde el proyecto de prueba de la unidad C#, la función parece tener la siguiente declaración de método (a través de IntelliSense):
bool ChangeJobUpdateDate (int jobIdIn, ValueType updateDateIn)
que es cierto que no soy tan familiarizados con C++/CLI, por lo ¿Se me escapa algo?
Eso fue todo! Parece que necesitaré pasar más tiempo leyendo sobre el significado de estos símbolos ^% & * ing. ¡Gracias! :) –
Eso es más o menos. C++/CLI realmente codifica el tipo real del valor en la firma; en este caso, en IL, el tipo completo sería: 'clase [mscorlib] System.ValueType modopt ([mscorlib] System.DateTime) modopt ([mscorlib ] System.Runtime.CompilerServices.IsBoxed) '- que es como el compilador de C++/CLI sabe más tarde el tipo correcto y hará una correcta comprobación de tipos - pero C# simplemente ignora todos los' modospt' y los trata como un simple 'ValueType'. –
@Pavel: Gracias por los detalles. Realmente estaba haciendo una conjetura educada. No dude en editar todo esto bondad en mi respuesta, o agregue la suya :) –