【问题标题】:Can a DLL that works on Visual C++ project be used in a Visual C# project? [closed]可以在 Visual C# 项目中使用适用于 Visual C++ 项目的 DLL 吗? [关闭]
【发布时间】:2014-07-31 01:24:08
【问题描述】:

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

对于 Visual C++ 案例,我需要做的就是将 dll 与可执行文件放在同一个文件夹中。对于 Visual C# 项目,当我尝试这样做时,我收到错误 %1 is not a valid Win32 application. 然后我尝试将 dll 作为引用添加到 Visual C# 项目中,但失败了。收到的错误是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。

【问题讨论】:

  • 您可能想了解托管代码和非托管代码之间的差异...而不是阅读 PInvoke 和“本机互操作”。比改进你的问题更清楚你想如何在 C# 项目中使用你的 C++ DLL(作为 COM 组件,通过 PInvoke,某种形式的 IPC...)
  • 为什么负点和投票结束?这不是一个模糊的问题。适用于 Visual C++ 的 DLL 能否适用于 Visual C#?
  • @Alexei Levenkov:感谢您向我指出这个方向。我对你提到的那些事情了如指掌。现在将阅读它们。但这是否意味着在C#中正确调用C++ DLL可以在C#中使用?
  • 即使您不知道正确的搜索字词,也最好在发布您的问题时查看相关问题(例如 stackoverflow.com/questions/21866345/…)。

标签: c# c++ visual-studio-2012 dll


【解决方案1】:

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

假设您的 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());
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多