Вызов методов из управляемого 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 вы можете использовать динамический вместо. (все еще будет использовать отражение, но с более приятным синтаксисом)