【问题标题】:Create instance of unmanaged dll class创建非托管 dll 类的实例
【发布时间】:2012-01-04 17:11:21
【问题描述】:

如何创建一个可以引用并直接用于从非托管 dll 调用方法的类? (假设非托管 dll 是不存在/在编译时已知的 dll)

例如,我有一个包含类 helloWorld 的 dll,我想创建该类的一个实例,然后调用 helloWorld.tell()。

【问题讨论】:

  • 动态并不总是意味着不受管理。
  • @JamesD'Angelo 你能解释一下不同之处吗?
  • C# 是一种托管语言,它使用垃圾收集器进行内存管理。 C++ 不是托管的——你必须自己管理内存。您可以动态加载 C# 程序集并使用反射来加载类、调用方法等等。这将是一个动态的、托管的程序集。
  • @JamesD'Angelo 我明白了。比它的管理。我以为你不知道 dll @runtime 的内容。问题仍然在于如何获取它的实例。感谢您到目前为止的解释!

标签: c# .net dll unmanaged


【解决方案1】:

您可以将您的程序集与 COM 接口一起使用,该接口可从非托管代码中获得。

这里有一些示例可供您下载。查看 COM Interop Part II 代码。 http://code.msdn.microsoft.com/windowsdesktop/Visual-Studio-2010-Samples-31b491f3

如果你觉得勇敢,这里有另一种解释:http://msdn.microsoft.com/en-us/library/aa645738(v=vs.71).aspx

希望对您有所帮助。

【讨论】:

  • OP 对非托管和动态程序集感到困惑。我认为这不是他们想要的。
【解决方案2】:

您似乎正在尝试动态加载程序集,而不一定要使用非托管程序集。您似乎正在寻找有关reflection 的信息。您可以使用Activator 来创建您需要的对象。有很多方法可以做到这一点,我会阅读它。以下是一些入门资源:

Code Project - Reflection in C# Tutorial

CSharp.Net - Reflection Introduction

CodeGuru.com - An Introduction to Reflection

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 2011-02-24
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2011-04-29
    • 2011-01-05
    相关资源
    最近更新 更多