使用DLLImport导入一个类

4

我有一个dll里的类: 例如:

namespace foo {
   public class baa {
      /* ... */
  }
}

我该如何从dll中导入baa类?这是可行的吗?
[DllImport(DllName)]
public extern ?? foo() ??

谢谢您的提前帮助。


1
这是什么语言?由于类名中有括号,它不是常用的语言。 - Ben Voigt
哦,抱歉。它是C#。括号是一个输入错误。 - The Mask
你不需要使用 DllImport 来使用 .NET 程序集... 只有在你想要使用非托管 DLL 时才需要它。 - Thomas Levesque
3个回答

9

这样行不通。未经管理的DLL导出的是C接口,而不是C++接口。对于托管的DLL(C#或C++/CLI),您根本不需要DllImport。

只有导入到静态类中的函数可以使用。


2

DllImport 仅用于从非托管库(如用 C++ 编写的库)调用非托管函数。

当您拥有托管的 .NET 程序集时,只需将其添加为项目引用并使用即可。

假设您有一个包含以下类的 .NET 类库:

namespace foo {
   public class baa {
      /* ... */
  }
}

然后,如果您有其他项目需要使用此程序集,可以转到“解决方案资源管理器”中的“引用”节点并将给定程序集添加为引用。然后将命名空间引入作用域:

using foo;

并实例化该类:

baa b = new baa();
... use the b instance here

我的问题是我有两个同名的dll(不是我编写的),这会导致冲突。还有其他方法可以解决这个问题吗?在Form1中,我引用了foo.dll和fooAPI命名空间,在form2中,我尝试引用具有不同内容的foo.dll。 - The Mask
看起来这是一个糟糕的情况...但我真的需要使用它。 - The Mask

1

这是一个标准的 C++ 导出机制,只适用于 C++。你不能直接从 C# 中导入它。有一些解决方法,比如从 MC++ 程序集中导出托管类型、使用单独的托管包装器、使用 COM 和类型库等,但你不能使用 C++ 应用程序使用的相同的导入/导出机制。


什么是标准的C++导出机制?我这里没有看到任何C++代码,也没有看到declspec(dllexport),而且declspec不是标准的。 - Ben Voigt
我认为他说的就是那个意思...我的意思是你有点希望他说的就是那个意思。 - kprobst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接