Próbuję wywołać metodę napisaną w C++/CLI z C#. Kod C++/CLI służy do aktualizacji kolumny TIMESTAMP
w bazie danych Oracle, z uwzględnieniem identyfikatora rekordu i obiektu System::DateTime
, który jest typem danych zgodnym z .NET dla typu Oracle TIMESTAMP
.Wywołanie metody C++/CLI z parametrem System :: DateTime wymaga "ValueType" jako parametru?
Sposób Wołam ma następujący prototyp:
bool ChangeJobUpdateDate (int jobIdIn, System::DateTime^ updateDateIn)
Dodałem odniesienie do tego projektu DLL w projekcie badania, które zrobiłem; Piszę testy w języku C#. Jednak gdy próbuję wywołać tę metodę z projektu badawczego jednostki C#, funkcja wydaje się, aby mieć następującą deklarację metody (poprzez intellisense):
bool ChangeJobUpdateDate (int jobIdIn, ValueType updateDateIn)
Ja wprawdzie nie jestem zaznajomiony z C++/CLI, tak czy jest coś, czego mi brakuje?
To było to! Wygląda na to, że muszę poświęcić trochę więcej czasu na czytanie znaczenia symboli ^% i * ing. Dzięki! :) –
To prawie wszystko. C++/CLI faktycznie koduje prawdziwy typ wartości do podpisu - w tym przypadku, w IL, kompletny typ będzie: 'class [mscorlib] System.ValueType modopt ([mscorlib] System.DateTime) modopt ([mscorlib ] System.Runtime.CompilerServices.IsBoxed) '- w taki sposób kompilator C++/CLI pozna poprawny typ i wykona poprawne sprawdzanie typu - ale C# po prostu ignoruje wszystkie' modopt' i traktuje je jako zwykły 'ValueType'. –
@Pavel: Dzięki za szczegóły. Tak naprawdę zgadywałem. Zapraszam do edytowania całej tej dobroci w mojej odpowiedzi - lub dodania własnego :) –