- ベストアンサー
プログラム初心者です。VC++でDLLを呼び出すときの方法が、いまいち
プログラム初心者です。VC++でDLLを呼び出すときの方法が、いまいち理解できません。 どこかに、わかりわかりやすく解説しているサイトを知りませんか? どなたかご教授御願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>GetProcAddressのところで、エラーが出るんです。 LoadLibraryでNULL以外が返ってきているということは、DLL名は間違っていないと思います。 で、GetProcAddressでNULLが返ってきているということは、関数名(moduele)が間違っているということです。 これ以上は、VBでどのようなソースが書かれていたのか具体的にわからないと、なんともいえません。 ためしに「VB VC DLL」で検索したら、以下のページがヒットしましたが、参考になりますでしょうか? http://www.geocities.co.jp/SiliconValley-SanJose/5309/dll_test.html
その他の回答 (2)
- titokani
- ベストアンサー率19% (341/1726)
既存のDLLであれば、DLLの供給元が使用方法を開示していると思いますよ。 自作DLLの場合、いろいろとありますね。特にMFCが絡んだりすると。 もともとわかりずらい部分がある話なので、サイトのせいではないと思います。 VCになれるまでは、DLLなぞ作らずに進めたほうが楽だと思いますし、 どうしてもDLLを作らなくてはならないのなら、目的、理由などを具体的に書いたほうが具体的なアドバイスが得られやすいと思います。 DLLの作り方を書いたサイトはいくつもあると思いますが、あなたの目的に合致していないサイトをいくら見ても混乱するばかりではないかと思います。
補足
一応、やりたいことがありまして。少し、質問よろしいですか? やりたいことは市販されているアプリを他のアプリにボタンでもくっつけて起動させたいんです。 起動させたいアプリの既往部分は、VB書かれているのですがこれをVCで書こうとしています。 引数として、利用するファイル(フルパス)やアプリへのパスをDLLのあるモジュールに渡すと、アプリが起動するんですが、一応書いたソースは #include <stdio.h> #include <windows.h> int main(void) { HINSTANCE hDLL; int (*func)(int); if ((hDLL = LoadLibrary("appli.dll")) == NULL) printf("LoadLibrary is failed.\n"); else { if ((func = (int (*)(int))GetProcAddress(hDLL, "moduele")) == NULL) printf("GetProcAddress is failed.\n"); return -2 else module(filepath,applipath); if (!FreeLibrary(hDll)) { printf("FreeLibrary is failed.\n"); return -3; } } return 0; } ソースはこんな感じで書いたんですけど、GetProcAddressのところで、エラーが出るんです。 何か間違っているでしょうか?指定した関数が違うのかな? VBで書かれたソースには、起動のところはクラス.メソッドに引数で書かれていたから、指定するDLLがいまいちわかっていないんです。 ひょっとしたら指定するDLLが間違っていいるのかも知れないですが、とりあえずソース的に間違っていいるのかどうかのアドバイスをもらえたなら幸いです。
- ohtawa
- ベストアンサー率23% (9/38)
(1)Load関数を使う方法 (2)xxxx.h と xxxx.libを使う方法 があるのかな
補足
今まで、linuxやCなどは触ってきたんですが、ふと機会がありVisual C++をインストールしたので、これを機にC++を扱うことになったんですが、今まで扱ってきたものと機能がぜんぜん違うので、最初の方から戸惑いの連続なのです。目標としてはDLLを呼び出して、アプリケーションを起動させることですが、今現在はヘッダーファイルの扱いすら満足にできてない次第です。
お礼
有難う御座います。 やはり、関数名が違うのかなぁ~。 サイト紹介も為になりました。 早速、検証したいと思います。