C# C++;c中的dll# 我有C++ dll,低于 #include "stdafx.h" extern "C" __declspec(dllexport)double Add(double a, double b); extern double Add(double a, double b) { return a + b; }

C# C++;c中的dll# 我有C++ dll,低于 #include "stdafx.h" extern "C" __declspec(dllexport)double Add(double a, double b); extern double Add(double a, double b) { return a + b; },c#,c++,dll,C#,C++,Dll,n在这里,我正在尝试将此DLL与我的C#应用程序链接 我得到一个错误: 无法加载DLL“DLL.DLL”:找不到指定的模块。(HRESULT异常:0x8007007E) 请帮助我……我如何将C++ DLL与C??< /P> < P>链接。调用约定决定函数调用之前函数参数如何放置在堆栈上,以及函数返回时如何删除它们(调用方与被调用方)。你可以在一百万个StackOverflow问题中找到更多关于这方面的信息,或者去读一读 关于DLL在您正在编写的C#(又名.NET)应用程序范围内的位置,我恐怕不能

n在这里,我正在尝试将此DLL与我的C#应用程序链接

我得到一个错误:

无法加载DLL“DLL.DLL”:找不到指定的模块。(HRESULT异常:0x8007007E)


请帮助我……我如何将C++ DLL与C??< /P> < P>链接。调用约定决定函数调用之前函数参数如何放置在堆栈上,以及函数返回时如何删除它们(调用方与被调用方)。你可以在一百万个StackOverflow问题中找到更多关于这方面的信息,或者去读一读


关于DLL在您正在编写的C#(又名.NET)应用程序范围内的位置,我恐怕不能对此发表评论,除非说通用DLL必须位于您的库搜索路径(Windows中的路径)当前目录或内核的主目录中(通常是c:\windows\system32。顺便说一句,不要将文件复制到system32。只需将应用程序设置为“从运行”你的DLL所在的目录,你应该很好。有一些例外情况,配置设置可能会从根本上改变这一点,但如果我是你,我现在会坚持使用simple。复杂的总是会在以后出现。

你需要将DLL安装在与C#exe相同的位置,或者将DLL打包在exe中。first选项非常简单。对于第二个选项,请检查出现此错误的原因是
DLL.DLL
不在调试/发布文件夹中

据我所知,visual studio不知道如何手动将这些文件复制到输出文件夹

将dll文件添加到C#解决方案中

然后在
文件属性上
构建操作
设置为
内容

并将
copy to output directory
设置为
copy if newer
这将自动复制

只是为了避免混淆,DLL被称为“DLL.DLL”对吗?而且,它是否位于生成的exe文件路径中?@james,您是否通过外部负载测试(如依赖项walker)进行了确保若要确保.dll不存在,但它所依赖的一切都是相同的,windows加载程序有一个可怕的趋势,即不仅当LoadLibrary无法加载.dll时,而且当.dll所依赖的.dll也无法读取时,windows加载程序会报告错误消息。您可能需要检查此问题。您需要将dll放入的原因是什么调试目录是指您没有提供DLL的路径。因此,默认情况下,它会查找调试文件夹中是否存在该DLL。应用程序必须在某个位置搜索DLL,而应用程序目录是一个位置,系统目录是另一个位置。但是,它不会在文件系统范围内搜索可能不存在的内容根本不存在。请看这里:
using System.Text;

using System.Runtime.InteropServices; 

namespace test
{

    class Program

    {

        [DllImport("DLL.dll", CallingConvention = CallingConvention.Cdecl)]

        public static extern double Add(double a, double b);  


        static void Main(string[] args)

        {




            Console.WriteLine(Add(1.0, 3.0)); // error here


            Console.ReadLine(); 

        }
    }
}