• ベストアンサー

プログラム初心者です。VC++でDLLを呼び出すときの方法が、いまいち

プログラム初心者です。VC++でDLLを呼び出すときの方法が、いまいち理解できません。 どこかに、わかりわかりやすく解説しているサイトを知りませんか? どなたかご教授御願いいたします。

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

  • ベストアンサー
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

>GetProcAddressのところで、エラーが出るんです。 LoadLibraryでNULL以外が返ってきているということは、DLL名は間違っていないと思います。 で、GetProcAddressでNULLが返ってきているということは、関数名(moduele)が間違っているということです。 これ以上は、VBでどのようなソースが書かれていたのか具体的にわからないと、なんともいえません。 ためしに「VB VC DLL」で検索したら、以下のページがヒットしましたが、参考になりますでしょうか? http://www.geocities.co.jp/SiliconValley-SanJose/5309/dll_test.html

yxia001
質問者

お礼

有難う御座います。 やはり、関数名が違うのかなぁ~。 サイト紹介も為になりました。 早速、検証したいと思います。

その他の回答 (2)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

既存のDLLであれば、DLLの供給元が使用方法を開示していると思いますよ。 自作DLLの場合、いろいろとありますね。特にMFCが絡んだりすると。 もともとわかりずらい部分がある話なので、サイトのせいではないと思います。 VCになれるまでは、DLLなぞ作らずに進めたほうが楽だと思いますし、 どうしてもDLLを作らなくてはならないのなら、目的、理由などを具体的に書いたほうが具体的なアドバイスが得られやすいと思います。 DLLの作り方を書いたサイトはいくつもあると思いますが、あなたの目的に合致していないサイトをいくら見ても混乱するばかりではないかと思います。

yxia001
質問者

補足

一応、やりたいことがありまして。少し、質問よろしいですか? やりたいことは市販されているアプリを他のアプリにボタンでもくっつけて起動させたいんです。 起動させたいアプリの既往部分は、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)
回答No.1

(1)Load関数を使う方法 (2)xxxx.h と xxxx.libを使う方法 があるのかな

yxia001
質問者

補足

今まで、linuxやCなどは触ってきたんですが、ふと機会がありVisual C++をインストールしたので、これを機にC++を扱うことになったんですが、今まで扱ってきたものと機能がぜんぜん違うので、最初の方から戸惑いの連続なのです。目標としてはDLLを呼び出して、アプリケーションを起動させることですが、今現在はヘッダーファイルの扱いすら満足にできてない次第です。

関連するQ&A

  • VC++のDLLファイルをVBで読み出せません。

    お世話になります。 プログラムをやり始めて3か月の初心者です。仕事で以下のような事をしていますが、うまくいかず悩んでいます。 プログラム(1):VB 2008年版 メインプログラム プログラム(2):C言語 2006年版 プログラム(3):VC++ VISUAL STUDIO2012 EXPRESSを使用 ■今のプログラム (2)のdllファイルを(1)で呼び出しています。問題なく動きます。 ■やりたい事 (2)のプログラム内容を変更したのが(3)です。そのdllファイルを(1)で呼び出したいです。 ⇒しかし、(3)のdllファイルを読み込むことができません。((3)のdllファイルは作れました。) (3)はVC単独では正しく動作します。 (1)のプログラムに、(2)を呼び出すときと同じように(3)用のプログラムを追加しました。作った(3)のdllファイルは指定したフォルダにきちんと入れています。 コンピューターに詳しい先輩が時間をかけてみてくれたのですが、結局わからずじまいでした。 ■質問 VBの型が古い、EXPRESSを使っているからできないのでしょうか? VCでdllを作って、VBで呼び出すまでの流れをわかりやすく紹介した書籍やWEBなどあればご教示頂けませんでしょうか? よろしくお願いいたします。

  • VC++6で作成したDLLをVC++.NET2003から呼び出せますか

    現在、VC++.NET2003で作成しています。あるメーカから提供されているDLLがあるのですが、そのDLLとのリンクまではできたのですが、実行するとエラーになってしまいます。 (プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。) そのDLLはVC++6で作成したものらしく、マニュアルには、VC++6で作成したアプリケーションからの呼び出し方法が、記述されていました。 VC++6でアプリを作成すれば、正常に呼び出せることは明白なのですが、いかんせん、VC++.NET2003での開発が、ある程度進んでしまっていますので、いまからVC++6に切り替えるわけにもいきません。 それで、一般論として、確認したいのですが、VC++6で作成したDLLをVC++.NET2003で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)

  • VC++でdllを取り込む方法

    VC++で既存のDLLファイルを自分のプロジェクトで使う方法はどのようにしたらいいのでしょうか?

  • VC2005のDLLのフォーマットについて

    VC2005 DLLファイルについて質問です。 巷には、DLLに登録されている関数名とか見れるツールが あるのですが、それらってどうやって作ってるんでしょうか。 DLLのヘッダ情報、ファイル構造など、どこかのサイトで公開 されてるのでしょうか?もし、知ってる方がいらっしゃったら、 興味があるので教えて頂けないでしょうか。

  • VC2005で作成したDLLファイルをVC2008で動的リンク(LoadLibrary)する方法

    「VC2005 Standard Edition」で作成したDLLファイルを、 「VC2008 Express Edition」で作成したコンソールアプリケーション から、LoadLibrary("VC2005で作成したDLLファイル")すると 失敗してしまいます。 GetLastErrorでエラーを取得すると、"36B1"が表示されます。 (このエラーは何か調べても見つかりませんでした) 何が原因かご存知の方がいらっしゃいましたら、 ご教授頂けませんでしょうか。

  • VC++2010のmsvcp100.dllについて

    私は、windows7 64bitで「Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1」や「Microsoft Windows SDK for Windows 7 and .NET Framework 4」 をインストールしました。 しかし、Message: Visual Studio C++ 2010のProgram Files (x86)\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.CRT\msvcp100.dllが見当たりません。redistフォルダ自体が存在しません。 どうすれば、Program Files (x86)\Microsoft Visual Studio 10.0\VC\いかにredistフォルダとmsvcp100.dllを作成することができますか?

  • vc++6.0にてdllとlibraryを作成する方法

    vc++6.0にてdllとlibraryを作成する方法 を知りたいのですが、dllとlibraryを それぞれ新規プロジェクトで立ち上げれば 作成できるのですが、dllを作成した際に libraryも作成(自動)されるようなことは できないのでしょうか?

  • VisualStudio2010 DLL作成方法

    VisualStudio2010を使っています(初心者)。 VBで作成していたのですが、一部VC++を使わなければいけなくなりました。VC++はDLLで作成して、VBの方でDLLを参照して処理を行いたいと考えています。 そこで試しに作成したVC++で作成したDLLをVBで参照しようとしたらERRORになってしまい上手にできませんでした。※ERRORの内容までは詳しく覚えてません。VC++のDLLを作成~VBのDLLの参照までを説明しているサイトなどありましたら教えて下さい。 よろしくお願いします。

  • mdbのレコードを読みとるDLLを作成したい

    プログラム初心者です。 最近になって少しずつ理解をしてきたと思います。 さて、質問なのですが・・・ C、もしくはC++でmdbのレコードを読み込むdllを作成したいのです。 それと同時に更新も出来るようなものです。 参考書を探しているのですが、この手の方法が書いておらず、サイトで検査している段階です。 何かヒントになるような事ご存知でしたら教えてください。 サイト、参考書、などでも構いません。 よろしくお願いします。 製作環境 windows2000 VC++6.0 VB6.0 

  • VC++2010でdllファイルの作成について

    プログラミングを始めたばかりです。 詳しく教えて下さい。 Microsoft Visual C++ 2010 Expressにて コンソールアプリを作ってdllファイルから「Test」とprintfで表示するプログラムを作ろうとしていますが、 ネットで探してもこれだ!と言うものがヒットしません。 どなたかご教授お願いします。 dllの作成方法と、dllの読み込み方法をあわせて教えてください。