• ベストアンサー

Visual C++でDLLを使いたいのですが、どう宣言したらよいのでしょうか?

Visual C++でDLLを使いたいのですが、どう宣言したらよいのでしょうか? またDLLは何処に入れればよいのでしょうか? DLLはMFCで書かれています。 ご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

libがないとリンクは出来ないでしょう LoadLibraryとGetProcAddressを使ったサンプルです。 #include <windows.h> #include <stdio.h> HINSTANCE hDll; long ( __stdcall *fft1dim)( long, double, double*, double*, long, long, double, double ); int main(void) { hDll = LoadLibrary("CalFFT.dll"); if( ! hDll ){ printf("DLL load error"); return 1; } fft1dim = (long(__stdcall*)( long, double, double*, double*, long, long, double, double) ) GetProcAddress( hDll, "fft1dim"); if( !fft1dim ){ FreeLibrary( hDll ); printf("Get function error"); return 2; } printf("OK!"); FreeLibrary( hDll ); return 0; }

motogijitu
質問者

お礼

やはりどうやってもリンク出来ませんでした。 ご丁寧に回答有難うございました。

motogijitu
質問者

補足

HINSTANCE hDllを使ってやってみましたが、だめでした。

その他の回答 (2)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

>宣言文を色々確かめたのですが、コンパイルは通り、 >リンクで未解決と出てしまいます。 結局、ヘッダファイルやLIBファイルはあるのでしょうか? まず、ビルドする時にリンクまで完了させるには、使用する DLLのエクスポート情報の入った「LIB」ファイルとヘッダファイル が必要になります。 LIBファイルが公開されていないDLLで関数の仕様のみが公開されて いる場合、DLLを動的に読み込む方法を使って関数を呼び出します。 WindowsAPIではLoadLibrary関数とGetProcAddress関数を使って 実装します。

motogijitu
質問者

お礼

試したのですがLoadLibrary関数でもダメでリンクでエラーになりました。 有難う御座いました。

motogijitu
質問者

補足

早速の回答有難うございます。 試してみます。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

その.dllには.libと.hファイルはありますか。 又は使える関数の定義とかわかっているのでしょうか。

motogijitu
質問者

お礼

言い忘れましたが、使おうとしているのはMFCのアプリケーションで プロジェクトで自動的にリンクされます。

motogijitu
質問者

補足

早速のご返事有難うございます。 下記がHPに載っていた使い方です。 宣言文を色々確かめたのですが、コンパイルは通り、リンクで未解決と出てしまいます。下記の2項がHPに載っていた定義です。 DLLはsystem、system32、及びカレントディレクトリに置いてます。 宜しくお願い致します。 1.エクスポート関数定義 下記にC関数としてのエクスポート関数を示します Long fft1dim( long number, //データ数 double dt //サンプリング間隔 double* re, //実数データ double* im, //虚数データ long process, //処理分岐フラグ long window, //ウィンドウ関数フラグ double LowFrq, //バンドパス時最低周波数 double HighFrq //バンドパス時最高周波数 ) 2.VBによるインポート宣言 下記にVBによる関数のインポート宣言を示します (VBでの宣言はこのreadme.txtの最後の付録を使用すると便利です) declare function fft1dim lib "CalFFT.DLL" ( byval data_number as long, byval dt as double, re as double, im as double, byval process as long, byval window as long, byval LowFrq as double, byval HighFrq as double ) as Long

関連するQ&A

専門家に質問してみよう