2016-08-23 3 views
0

Visual StudioでFORTRANプロジェクトで使用するいくつかのDLLがありますが、その方法はわかりません。DLLをfortran(visual studio)にリンクするにはどうしたらいいですか?

ここでは、私がどのように使用しているか簡単なコードを示します。 Visual Studioを使用

私が突出したDLLのリンクを追加しました。この

subroutine printing 

    !DEC$ ATTRIBUTES DLLEXPORT::printing 
    print*,"dll naimi created" 

    end subroutine printing 

からDLLを作成しました>プロパティ>リンカ>一般>追加のライブラリディレクトリ

主なプログラム:

program Console11 
implicit none 

call printing 

end program Console11 

エラー:Error 1 error LNK2019: unresolved external symbol _PRINTING referenced in function _MAIN__.

他のsoluti DLLを生成中に作成された.libを使用することを提案していますが、私の実際のケースでは、DLLは.libなしでしか使用できません。

どのようにDLLを使用するのですか?

+0

Visual Studioは、そのままではFortranについて何も知らない。どのFortranコンパイラを使用していますか? – IanH

答えて

1

リンカーへの入力ファイルとしてDLLを使用しようとしているようです。

(リンカオプションのファイルを指定しているように見えますが、リンカに追加の入力ファイルを指定するには、ソースファイルを追加するのと同じようにプロジェクトにファイルを追加するか、あなたの投稿に言及しているプロパティは、(どのディレクトリで)それらの追加の依存関係を検索するかをリンカに伝えます)。

UNIXの規則とは異なり、 Windows上で実行可能ファイルやその他のDLLをビルドするときにDLLとリンクします。 DLLには通常、リンカに必要な情報が含まれていません。代わりに情報がインポートライブラリ(典型的な.lib静的ライブラリのバリエーション)または同等のものに含まれています。

DLLを正常にビルドできた場合は、そのDLLのインポートライブラリがDLLと同じディレクトリにあります。インポートライブラリを、DLLが必要なプロジェクトの追加の依存関係として提供します。

Windowsでインポートライブラリを使用してEXEまたは他のDLLをリンクすると、実行可能コードがロードされるとオペレーティングシステムによってターゲットDLLが自動的にロードされます。これは、ロード時の動的リンクと呼ばれます。あなたはDLLのインポートライブラリを持っていない場合は

は、その後、あなたの選択肢は次のとおりです。

  • インポートライブラリのDLLを建てた人を確認して下さい。

  • DLLをロードするのではなく、実行時の動的リンクを使用して参照します。これは、特定のDLLを読み込み、関数ポインタのアドレスを取得するように明示的にオペレーティングシステムに指示するために、プログラムでWindows API関数LoadLibrary、GetProcAddress、およびfriendsを使用することを意味します。インテルFortranを使用している場合、コンパイラにはこの例の完全な例がインストールされています.C:¥Program Files(x86)¥IntelSWTools¥samples_2016¥en¥compiler_f¥psxe¥DLL.zipなどのファイルを参照してください。

  • DLL内の最小限の情報、およびDLLに関するその他の情報からインポートライブラリを生成します。 1つのアプローチは、モジュール定義ファイル(。def)を使用して、LIBユーティリティを使用して、そのdefファイルをインポートライブラリに変換します。例についてはHow to make a .lib file when have a .dll file and a header fileを参照してください。

関連する問題