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ここでmこの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(); 

        }
    }
}

mエラーが発生しました:

DLL'DLL.dll'を読み込めません:指定されたモジュールが見つかりませんでした。(HRESULTからの例外:0x8007007E) "

私を助けてください...どうすればc++dllをc#にリンクできますか?

4

3 に答える 3

1

呼び出し規約は、関数を呼び出す前に関数パラメーターをスタックに配置する方法と、関数が戻ったときにそれらを削除する方法(呼び出し元と呼び出し先)を決定します。これについては、約100万のStackOverflowの質問で詳しく知ることができます。または、ここに移動して少し読んでください。

あなたが書いているC#(別名.NET)アプリケーションの手の届くところにDLLを配置することに関して、私は一般的なDLLがあなたのlib-searchパス(WindowsのPATH)になければならないということを除いてそれについてコメントすることはできませんディレクトリ、またはカーネルのホームディレクトリ(通常はc:\ windows \ system32。ファイルをsystem32にコピーしないでください。ところで、DLLが存在するディレクトリから「実行」するようにアプリケーションを設定するだけで問題ありません。例外があります。これと、これを根本的に変える可能性のある構成設定ですが、私は今のところ単純なものに固執します。複雑なものはいつでも後で来る可能性があります。

于 2012-09-10T06:30:35.913 に答える
0

C#exeと同じ場所にdllを配置するか、exe内にdllをパックする必要があります。最初のオプションは十分に単純です。2番目のオプションについては、Visual C#2010の.exeへのDLLの埋め込みを確認してください。

于 2012-09-10T06:47:44.067 に答える
0

DLL.dllデバッグ/リリースフォルダになかったため、このエラーが発生しました。

私の知る限り、Visual Studioは、これらのファイルを手動で出力フォルダーにコピーする方法を知りません。

dllファイルをC#ソリューションに追加します

次に、これにfiles properties設定build actionして設定するcontent と、コピーが自動化されますcopy to output directorycopy if newer

于 2012-09-10T06:54:32.067 に答える