在Visual c++项目中工作的DLL可以在Visual c#项目中使用吗?

Can a DLL that works on Visual C++ project be used in a Visual C# project?

本文关键字:项目 Visual DLL c++ 工作      更新时间:2023-10-16

我有一个可以在Visual c++项目中使用的DLL,没有问题。当我在Visual c#项目中使用相同的DLL时,会出现问题。

对于Visual c++的情况,我所需要做的就是将dll与可执行文件放在同一个文件夹中。对于Visual c#项目,当我尝试时,我得到错误%1 is not a valid Win32 application.然后我试图在Visual c#项目中添加dll作为参考,但失败了。收到的错误是The dll could not be added. Please make sure file is accessible and it is a valid assembly or COM component.

这是因为在Visual c++上工作的相同的dll不能在Visual c#项目中使用而不进行修改吗?

谢谢。我使用的是Visual studio 2012

可以,但是有一种特殊的方法。首先,DLL必须与你的可执行文件(c#汇编)在同一个目录中,或者至少在一个合适的DLL搜索路径中。然后,您需要使用P/Invoke定义要对DLL进行的每个调用(正如Alexei指出的那样)。这是微软提供的关于这个主题的教程。

假设你在c++ DLL中有一个函数,它提供了两个整数,将它们相加并返回结果。下面是一个调用c++ DLL中的函数的简短应用程序。

using System.Runtime.InteropServices;
...
public class Program
{
    [DllImport("yourcppdll.dll")]
    public static extern int AddNumbers(int n1, int n2);
    static void Main(string[] args)
    {
        int result = AddNumbers(2, 2);
        //result equals 4
        Console.WriteLine("Result is " + result.ToString());
    }
}

你可以做更多的事情,这只是一个非常简单的例子。