0

我有如下 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; 
} 

n 这里我试图将此 DLL 与我的 C# 应用程序链接

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(); 

        }
    }
}

米得到错误:

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

请帮帮我...如何将 c++ dll 与 c# 链接?

4

3 回答 3

1

调用约定确定函数参数在函数调用之前如何放置在堆栈上,以及函数返回时如何删除它们(调用者与被调用者)。您可以在大约 100 万个 StackOverflow 问题中找到更多相关信息,或者转到此处阅读一些内容。

关于将 DLL 放置在您正在编写的 C#(又名 .NET)应用程序的范围内,恐怕我无法对此发表评论,除非说通用 DLL 必须在当前的 lib-search 路径(Windows 中的 PATH)中目录,或内核的主目录(通常是 c:\windows\system32。不要将文件复制到 system32,顺便说一句。只需将您的应用程序设置为“从”您的 DLL 所在的目录“运行”就可以了。例外到这个,以及可以从根本上改变这个的配置设置,但如果我是你,我现在会坚持简单。复杂总是可以稍后出现。

于 2012-09-10T06:30:35.913 回答
0

您收到此错误是因为DLL.dll不在您的调试/发布文件夹中,

据我所知,Visual Studio 不知道如何手动将这些文件复制到您的输出文件夹中。

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

然后files properties设置build actioncontent 并设置copy to output directorycopy if newer这将自动复制

于 2012-09-10T06:54:32.067 回答
0

您要么需要将 dll 放置在与 C# exe 相同的位置,要么将 dll 打包到 exe 中。第一个选项很简单。对于第二个选项,请查看在 Visual C# 2010 中将 DLL 嵌入到 .exe 中

于 2012-09-10T06:47:44.067 回答