2010-05-31 9 views
9

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?

Odpowiedz

11

Podejrzewam, że to dlatego, że używasz DateTime^ zamiast tylko DateTime. Jest to typ wartości, więc dlaczego próbujesz użyć referencji?

C# nie ma żadnego sposobu reprezentowania pudełkowej typ odniesienia związanego z typem wartości, tak najlepiej można to zrobić, to ValueType - I podejrzany to, co się dzieje, chociaż nie mogę powiedzieć na pewno, ze względu na mój brak doświadczenia z C++. Wypróbuj tylko DateTime i zobacz, jak to wygląda ...

+1

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! :) –

+3

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'. –

+0

@Pavel: Dzięki za szczegóły. Tak naprawdę zgadywałem. Zapraszam do edytowania całej tej dobroci w mojej odpowiedzi - lub dodania własnego :) –

Powiązane problemy