Java アプリケーション内で C# 関数を使用しようと何時間も費やしましたが、成功しませんでした... C# で次のライブラリを作成しました。
public class Converter
{
public Converter()
{
}
public bool ConvertHtmlToPdf(String directoryPath)
{
//DO SOMETHING
}
}
このdllは別のdllを呼び出していくつかの操作を行いますが、コンパイルするとRealseフォルダーにDLLが見つかり、すべて問題ないように見えるため、32ビットオプション、64ビット、および任意のCPUオプションを使用してコンパイルし、そうでないことを確認しました私の問題。
32 ビットのDependency Walkerと任意の CPU オプションを使用して dll ファイルを分析すると、IESHIMS.DLL が見つからないと表示され、次のメッセージが表示されます。
警告: 少なくとも 1 つの遅延読み込み依存モジュールが見つかりませんでした。警告: 遅延ロード依存モジュールにエクスポート機能がないため、少なくとも 1 つのモジュールに未解決のインポートがあります。
64 ビット ファイルでは発生しませんが、ConvertHtmlToPdf 関数が見つかりません。
関連性があるかどうかわからないので、私の 2 番目のステップは Java コードでした。
ライブラリをロードするには、次のようにします。
System.setProperty("jna.library.path", "C:\\Program Files (x86)\\Facilit\\Target App\\lib");
と:
public interface IConversorLibrary extends Library {
IConversorLibrary INSTANCE = (IConversorLibrary) Native.loadLibrary("converter", IConversorLibrary.class);
void ConvertHtmlToPdf(String directoryPath);
}
(lib は正常にロードされたようです。実行中のアプリケーションで dll ファイルを削除しようとすると、使用中のため削除できないと表示されます)そして最後に:
IConversorLibrary.INSTANCE.ConvertHtmlToPdf(directoryPath);
しかし、結果は私が望むものではありません:
java.lang.UnsatisfiedLinkError: Error looking up function 'ConvertHtmlToPdf': Could not find the specified procedure.
何が間違っているのかわかりません。多くのチュートリアルや多くのことを試しましたが、何でもうまくいくようです。どんな助けも本当に感謝しています。