3

Visual Studioを使用してdllファイルを作成し、Javaプロジェクトで使用/アクセスしようとしています。ライブラリがロードされているようですが、常に同じ例外がスローされます。スレッド "main"の例外java.lang.UnsatisfiedLinkError:関数'function'の検索中にエラーが発生しました:指定されたプロシージャが見つかりませんでした。私のC/C ++スキルは最高ではないので、問題が発生する可能性があります。クラス、名前空間、静的メソッド、およびWebで見つかった他のスタッフを使用して、hファイルとcppファイルを編集しようとしましたが、何もしませんでした。Depency Walker Toolについて話している他の投稿も見ましたが、dllを開くことができません。また、「estern」を使用することで回避できることがわかったため、コンパイラが関数名に奇妙なサフィックスを追加することもわかりました。 hまたはcppファイルの「C」」ですが、できませんでした。

私のインターフェース:

import com.sun.jna.Library;
import com.sun.jna.Native;

public interface SimpleDll extends Library {

    SimpleDll instance = (SimpleDll) Native.loadLibrary("SimpleDll", SimpleDll.class);

    void function();


}

私のメインクラス:

public class Test_Dll {

    public static void main(String[] args) {
        SimpleDll simpleDll = SimpleDll.instance;

        simpleDll.function();
    }
}

私のhファイル:

#ifndef SIMPLEDLL
#define SIMPLEDLL

namespace simpeDll{


    static void function();


}
#endif

私のcppファイル:

#include "stdafx.h"
#include "simpleDll.h"
#include <stdexcept>

using namespace simpeDll;

static void function(){

}
4

1 に答える 1

7
  1. simpleDll名前空間の外で関数を宣言してください。
  2. 必ず飾ってくださいextern "C"
  3. 関数を公開するか、モジュール定義ファイル__declspec(dllexport) void __cdecl function();を使用してください
于 2013-03-14T09:45:23.907 に答える