[英]C++ dll within c#
我有如下的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#鏈接?
調用約定確定在函數調用之前如何將函數參數放置在堆棧上,以及在函數返回時如何將其刪除(調用者與被調用者)。 您可以在大約一百萬個StackOverflow問題中找到有關此問題的更多信息,或者轉到此處閱讀一些內容。
關於您正在編寫的C#(aka .NET)應用程序所能訪問的DLL的位置,恐怕我無法對此發表評論,除非說通用DLL必須位於當前的lib-search路徑(Windows中的PATH)中。目錄,或內核的主目錄(一般為C:\\ Windows \\ System32下不將文件復制到system32下,順便說一句只安裝您的應用程序到您的DLL駐留在目錄“從運行”,你應該罰款也有例外為此,以及可以從根本上改變這一點的配置設置,但是現在我還是堅持簡單,復雜總是會在以后出現。
您將需要將dll植入與C#exe相同的位置,或者將dll打包在exe中。 第一種選擇很簡單。 對於第二個選項,請在Visual C#2010中簽出將DLL嵌入到.exe中。
您收到此錯誤,因為DLL.dll
不在您的調試/發布文件夾中,
據我所知,Visual Studio不知道如何手動將這些文件復制到輸出文件夾。
將dll文件添加到您的C#解決方案
然后在files properties
上將build action
設置為content
,並將copy to output directory
設置copy to output directory
要copy if newer
copy to output directory
( copy if newer
則將自動進行復制)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.