Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vc+中使用c#Dll+;?_C#_.net_Visual C++ - Fatal编程技术网

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

如何在vc+中使用c#Dll+;?,c#,.net,visual-c++,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,因为您

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

如何做到这一点

非常感谢你的帮助

这就是我正在做的

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

main.cpp

using namespace Test

void main()

{

  demo d;

  d.add(5,5);

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

如何解决这个问题

我需要在非托管代码中使用该dll,因为您的C#程序集需要ComVisible属性(以及其他一些东西)

MSDN论坛上有.

你想做的就是 只编译你想要的文件 加载C代码/clr,然后调用 使用C++/CLI。剩下的时间 应用程序将保持本机状态,而那些cpp 您编译的文件/clr将混合使用 本机和CLR。你应该能够 只需使用 C++/CLI语法

一旦在cl.exe上抛出/clr 文件的命令行,在该命令行中 文件,您可以调用任何托管代码 你想要的,不管 它是用VB.net、C#或 C++/CLI。这是迄今为止最简单的 做你想做的事情的方法(打电话给C# 来自您的本地C++应用程序的代码, 虽然它有它的警告和 局限性但总的来说,“它 只是工作”。而且,它比 p/invokes


<>这很大程度上取决于你正在构建的C++应用程序的类型。如果要构建C++/CLI程序集,则需要确保项目中有对C#DLL的引用。一旦这样做了,你应该能够输入代码作为书面假设你有一个这样的演示定义

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

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

如果C++应用程序被管理,那么它当然比这更容易,你可以完全避免COM。@ Matthew Brindley我做了什么,但我得到了一个错误,不能从'const uGuID '转换为'conixWebFrasWorkDaab::DataAccessInterface '。“我应该怎么做?”我在“调用来自本地C++代码的托管DLL”之前进行了很好的操作,但是当我尝试创建一个指针时,我得到以下错误“错误C2259:‘iISWebFraskWorkDAA::DataAccessInterface’:不能实例化抽象类1>,因为以下成员:1>HESReION::Que界面(const IID&,void**):是抽象的“我应该怎么做?实际上错误的原因是”原因:无法从“const”GUID转换为“const IISWebFrameworkDAAB::DataAccessInterface””。我应该怎么做?
namespace Test {
  public class demo {
    public void add(int left, int right) { 
      ...
    }
  }
}