从托管 C++ 调用方法动态链接库对象

发布于 2024-11-08 18:28:01 字数 541 浏览 0 评论 0原文

我在 C# 中加载了我的 dll

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

,但是如何在不使用

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

--> 的情况下访问 readerInterface 中的方法/成员?以 readerInterface.write() 的形式; ???

非常感谢!

问候莱昂22

I load my dll in C# with

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

but how can I access to my methods/members in readerInterface without

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

--> in form of readerInterface.write(); ???

Thank you very much!

greets leon22

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弱骨蛰伏 2024-11-15 18:28:01

假设您不能只引用项目 C# 中的程序集...让 C++/CLI 对象实现一个接口并将其转换为该接口,然后照常使用它。

1) 使用任何合适的方法在 C# 中声明接口

public interface IFoo
{
    SomeMethod()
}

2) 在 C++/CLI 对象上实现接口

3) 将通过反射创建的对象强制转换为该接口

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

assuming that you can't just reference the assembly in your project C#... have the C++/CLI object implement an interface and cast it to that interface, then just use it as normal.

1) declare your interface in C# using whatever methods are appropriate

public interface IFoo
{
    SomeMethod()
}

2) Implement the interface on your C++/CLI object

3) cast the object that you created through reflection to that interface

object readerInterface = Activator.CreateInstance(classType);
IFoo myFoo = readerInterfces as IFoo;
初懵 2024-11-15 18:28:01

在 c# 3 中,您必须使用反射或让对象实现已知的接口。

在 C# 4 中,您可以使用动态代替。 (仍将使用反射,但具有更好的语法)

In c# 3 you must use reflection or have the object implement a known interface.

In C# 4 you can use dynamic instead. (will still use reflection but with nicer syntax)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文