1

プラットフォーム: WinXP SP2、インテル Fortran 11、Excel 2007

dll ファイルを Excel に接続できません。

dll ファイルは比較的単純です。

subroutine FortranCall (r1, num)
!DEC$ ATTRIBUTES DLLEXPORT, STDCALL, REFERENCE, ALIAS:"FortranCall" :: FortranCall
integer, intent(in) :: r1
character(10), intent(out) :: num
!DEC$ ATTRIBUTES REFERENCE :: num

num = ''
write (num,'(i0)') r1 * 2

return
end subroutine FortranCall

次を使用してビルド: ifort /nologo /dll Fcall.f90、その後、C ドライブの「temp」ディレクトリにコピーします (とにかく、ここにバックスラッシュを書き込むにはどうすればよいですか (コピー/貼り付けを除く) ? )

Sheet1に次のExcelファイルがあります。

Private Sub CommandButton1_Click()
Dim r1 As Long
Dim num As String * 10

     r1 = 123
     Call FortranCall(r1, num)

     TextBox1.Text = "Answer is " & num

End Sub

そしてModuel1で:

Declare Sub FortranCall Lib "C:\temp\Fcall.dll" (r1 As Long, ByVal num As String)

実行すると、次のエラーが報告されます: ランタイム エラー 53、ファイルが見つかりません c:\temp\fcall.dll

何が間違っているのか誰にも手がかりがありますか?

4

6 に答える 6

2

私は同じ問題を抱えていました-非常にイライラします!

Excel VBA で同様の宣言を行いました: Declare Sub FortranCall Lib "C:\temp\Fcall.dll" (r1 As Long, ByVal num As String)

私のコンピューターでは動作しましたが、上司のコンピューターでは動作しませんでした。ファイル名のスペルとパスの指定はすべて問題ありませんでした。私の DLL は Microsoft Visual C++ 6.0 でコンパイルされました。問題は - 「File not found/Runtime error 53」の一般的な原因は、問題の dll が実際に依存している dll を呼び出し元のアプリケーションが見つけられないことです!!! 私は、デバッグ モードでコンパイルした DLL を上司に渡しました。この場合、DLL は、通常のコンピューターでは一般的に見られない DLL の他の多くのデバッグ バージョンを使用します。上司に DLL の RELEASE バージョンを渡したところ、問題なく動作しました。参照: http://software.intel.com/en-us/forums/showthread.php?t=42472

于 2010-12-17T03:02:25.013 に答える
2

これは非常に古い質問であることは知っていますが、先日この問題に出くわし、後世のために答えを出そうと思いました. Fortran DLL を呼び出す VBA コードは、私のコンピューターでは正常に機能しましたが、上司や他の人のコンピューターでは機能しませんでした。「デバッグ」モードではなく「リリース」モードでコンパイルしたにもかかわらず、問題は他の DLL に依存することになりました。私はDependency Walkerを使用して、動作しないコンピューター上の DLL の依存関係をチェックし、必要な Intel コンパイラーに付属する 2 つの DLL を見つけ、これらを独自のコンパイル済み DLL と共に配布しました。

于 2012-02-18T06:22:47.727 に答える
1

DLLをC:\ Windows \ system32(またはデフォルトのパスにある他のフォルダー)に移動して、Libパーツを。に変更してみて"FCall.dll"ください。これにより、実際のファイルを見つける際の奇妙なことが解消されます。

于 2009-06-10T08:17:04.153 に答える
1

何が問題なのかわからない。

私は ifort コンパイラを手に入れることができませんでしたが、Declare ステートメントで指定された Temp フォルダーにランダムな DLL をコピーして、あなたのコードを試してみました。実行すると、「C:\Temp\RandomDLL.DLL に DLL エントリ ポイント FortranCall が見つかりません」というエラーが表示されます。呼び出しコードと一致しません)。

コンパイルした DLL をランダムな他の DLL に置き換えてみて、同じエラーが発生するかどうかを確認してください。もしそうなら、それはコンパイラの問題ではなく、OS 環境の問題です。

これはおそらくあまり役​​に立ちませんが、1 つまたは 2 つの可能性をなくす可能性があります。

使用環境:Win Vista、Excel 2003

于 2009-06-10T04:26:11.730 に答える