【问题标题】:Can I import a dll for one class only?我可以只为一个类导入 dll 吗?
【发布时间】:2014-04-23 00:31:56
【问题描述】:

早安,

我过去曾为“user32.dll”使用过 dll 导入。 但是,我正在尝试将一个类库导入我的应用程序,该应用程序有一些命名空间,这些命名空间与已经从其他类库导入和引用的命名空间发生冲突。

如何引用这个 dll 并仅使用其中包含的命名空间,或者在一个类中覆盖从其他类库导入的其他命名空间而不影响应用程序的其余部分。

我还是新手,这可能是不可能的。

谢谢。

【问题讨论】:

  • 好吧,您不能将单个函数导入(如 user32.dll)与 .NET(或 COM 兼容)生成的库一起使用,因为它们中的大多数不提供所需的 entry points。因此,如果您的目标库不提供入口点,则您必须完全引用它并通过全局路径访问它的对象。
  • 这就是我的问题。如果我将这个特定的 dll 导入我的程序集中,它包含与我的应用程序中已有的名称空间和类竞争的名称空间和类。这会导致重大问题。我希望我可以根据需要加载程序集并从中调用函数,而无需在我的应用程序中引用它。如果这对任何想法有帮助的话,我可以深入了解我想做的事情......
  • 那么请检查别名结构:msdn.microsoft.com/en-us/library/ms173212.aspx 和/或 using 关键字:stackoverflow.com/questions/1179630/…
  • 太棒了!谢谢先生的指导。这种“使用”方法是否也适用于带有“导入”的 vb.net?
  • 对不起,新的相关问题:我仍然需要引用 vb.net 中的 dll。尽管您的第一个链接在 cs 中解释了它,但我仍然对如何使用 Visual Basic 引用它有疑问。我深表歉意并感谢您的帮助。

标签: vb.net class dll import reference


【解决方案1】:

总结相关问题:

VB.NET 中,可以使用Declare 语句通过典型的EntryPoint 构造调用DLL 中的win32 函数。

.NET 程序集不提供经典的 Win32 类型入口点(因此不能“声明”)

如果需要引用 .NET 程序集 [或 COM],则需要在编译时添加对目标库的引用(通常在 VS IDE 中或使用 /r: 开关完成)

在某些情况下,此类引用程序集的命名空间可能会与其他程序集发生冲突。 (即在不同版本中引用相同的程序集)

在这种情况下,需要使用 Alias 导入所需的(冲突的)命名空间

例如:

假设您有一个带有根命名空间 Net 的程序集,它可能与 System.Net 发生冲突,请使用:

Imports System
Imports ExtNet = SomeNetworkAssembly

然后在这种情况下访问该程序集的成员使用ExtNet 而不是Net

请注意,您可以随意命名ExtNet 部分。

在 C# 中,可以通过 using 关键字来代替。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 2010-09-20
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2018-10-21
    相关资源
    最近更新 更多