如何在vc ++中使用c#Dll?

时间:2009-06-11 12:28:33

标签: c# .net visual-c++

我使用命令行(csc)创建了一个dll。假设dll包含Add(int,int)方法。现在我想在vc ++中使用add函数?

怎么做?

您的帮助将得到极大的赞赏。

这就是我在做什么。

vcproj;对于这个项目我有右键单击和链接器部分添加其他依赖项。添加dll所在的路径。

的main.cpp

using namespace Test

void main()

{

  demo d;

  d.add(5,5);

}

错误命名空间测试不存在。

如何解决这个问题?

我需要在非托管代码中使用该dll

3 个答案:

答案 0 :(得分:9)

您的C#程序集需要ComVisible属性(在其他一些内容中)。

[assembly: ComVisible(true)] 

a guide to doing this here

答案 1 :(得分:8)

来自MSDN论坛Calling C# from unmanaged C++

  

你想做的是   只编译你想要的文件   加载C#code / clr然后调用   离开使用C ++ / CLI。其余的你   应用程序将保持原生,而那些cpp   你编译/ clr的文件将被混合   原生和CLR。你应该能够   只需使用调用您的C#库   C ++ / CLI语法。

     

在cl.exe上抛出/ clr   该文件的命令行   文件,您可以调用任何托管代码   你想要的,不管是否   它是用VB.net,C#或   C ++ / CLI。这是迄今为止最容易的   做你想做的事情(打电话给C#   来自您的本机C ++应用程序的代码),   虽然它确实有其警告和   限制。总的来说“它   Just Works“。而且,它比...更快   P /所调用。

答案 2 :(得分:2)

这在很大程度上取决于您正在构建的C ++应用程序的类型。如果要构建C ++ / CLI程序集,则需要确保项目具有对C#DLL的引用。一旦完成,你应该能够按照书面形式输入代码,假设你有这样的Demo定义。

namespace Test {
  public class demo {
    public void add(int left, int right) { 
      ...
    }
  }
}

如果要构建正常的非托管C ++项目,则必须使用COM interop来访问程序集。这涉及使C#项目中的演示类型COMVisible并将其注册到COM互操作。之后,您可以像任何其他COM组件一样访问它。