Вызов методов из управляемого dll объекта C++

Я загружаю свою DLL в C# с

Assembly assembly = Assembly.LoadFrom(dllPath); // late binding
Type classType = assembly.GetType("Namespace.Classname"); 
object readerInterface = Activator.CreateInstance(classType);

но как я могу получить доступ к моим методам / членам в readerInterface без

type.InvokeMember("Methodname", BindingFlags.InvokeMethod |             
    BindingFlags.Instance | BindingFlags.Public, null, readerInterface, null);

-> в форме readerInterface.write();???

Большое спасибо!

приветствует leon22

2 ответа

Решение

Предполагая, что вы не можете просто ссылаться на сборку в вашем проекте C#... пусть объект C++/CLI реализует интерфейс и приведёт его к этому интерфейсу, а затем просто используйте его как обычно.

1) объявите ваш интерфейс в C#, используя любые подходящие методы

public interface IFoo
{
    SomeMethod()
}

2) Реализуйте интерфейс на вашем объекте C++/CLI

3) приведите объект, который вы создали с помощью отражения к этому интерфейсу

object readerInterface = Activator.CreateInstance(classType);
IFoo myFoo = readerInterfces as IFoo;

В C# 3 вы должны использовать отражение или иметь объект, реализующий известный интерфейс.

В C# 4 вы можете использовать динамический вместо. (все еще будет использовать отражение, но с более приятным синтаксисом)

Другие вопросы по тегам