Вызов C# перегруженного метода из managed C++
От: sax0n Украина  
Дата: 07.11.13 14:02
Оценка:
Привет.
В библиотеке на С# есть интерфейс
public interface IInterface
{
    public IObject Get(SomeClass a, SomeClass1 b);
    public IObject Get(SomeClass a, SomeClass2 c);
}


В коде на С++ необходимо вызвать второй метод с SomeClass2. При этом компилятор выдает ошибку

cannot convert parameter 2 from 'SomeClass2 ^' to 'SomeClass1 ^'


Вызов первого метода работает отлично.
Re: Вызов C# перегруженного метода из managed C++
От: maloi_alex СССР  
Дата: 07.11.13 20:29
Оценка:
Здравствуйте, sax0n, Вы писали:

S>Привет.

S>В библиотеке на С# есть интерфейс
S>
S>public interface IInterface
S>{
S>    public IObject Get(SomeClass a, SomeClass1 b);
S>    public IObject Get(SomeClass a, SomeClass2 c);
S>}
S>


S>В коде на С++ необходимо вызвать второй метод с SomeClass2. При этом компилятор выдает ошибку

S>

S>cannot convert parameter 2 from 'SomeClass2 ^' to 'SomeClass1 ^'


S>Вызов первого метода работает отлично.


А как у вас C# и C++ взаимодействуют?
Re: Вызов C# перегруженного метода из managed C++
От: vit_as Россия  
Дата: 08.11.13 02:53
Оценка:
Здравствуйте, sax0n, Вы писали:


S>В коде на С++ необходимо вызвать второй метод с SomeClass2. При этом компилятор выдает ошибку

S>

S>cannot convert parameter 2 from 'SomeClass2 ^' to 'SomeClass1 ^'


S>Вызов первого метода работает отлично.


Приведите код вызова из C++/CLI. Я не поленился воспроизвести данный пример, никаких проблем при компиляции и работе методов не выявлено.
Да и реализация интерфейсов происходит в какой Assembly? та что на C# или C++?
Re[2]: Вызов C# перегруженного метода из managed C++
От: sax0n Украина  
Дата: 08.11.13 06:32
Оценка:
Здравствуйте, vit_as, Вы писали:

S>>Вызов первого метода работает отлично.


_>Приведите код вызова из C++/CLI. Я не поленился воспроизвести данный пример, никаких проблем при компиляции и работе методов не выявлено.

_>Да и реализация интерфейсов происходит в какой Assembly? та что на C# или C++?

Проблема была в моем коде. Спасибо большое.
Причина была в следующем: в обоих методах был аргумент System::DateTime.
Я этот аргумент, как и все остальные, объявлял как референс — System::DateTime. В то время как дата является value типом. При этом при вызове первого метода он (автоматически? волшебным способом?) преобразовывался в value тип, а второй уже не работал. Немного загадка для меня все же, но когда сделал так System::DateTime^ -> System::DateTime стали доступны оба метода.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.