• ベストアンサー

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

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

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

  • ベストアンサー
  • kabe64
  • ベストアンサー率72% (13/18)
回答No.4

DLLを作る時はWin32プロジェクトでDLLを選択。ここまではいいですよね。 その後は確かにVisualStudioも不親切だと思います。(アレ、2005あたりまではもうちょっと親切だった気がするんですが) プロジェクト名をTestDllにして作ったとします。 ここでひな形にTestDll.cppが出来てますから、その中に自分が追加する関数を記述します。 #include <Tchar.h> #include "TestDll.h" void TestFunc() {   _tprintf(_T("Test\n")); } 次にヘッダーファイルを自分で追加します。ヘッダーファイルを右クリックして、追加(D) - 新しい項目(W)...ですね。 ファイル名はなんでもいいんですが、ここはTestDll.hにしておきましょう。 追加したら先ほどの関数のプロトタイプを一行記述します。 void TestFunc(); このヘッダファイルはdllを読み込む側が使うヘッダファイルです。 これでビルドは通りますが、DLLとして追加した関数を使えるようにするためには関数をエクスポートする必要があります。(ここが不親切) ソースファイルに自分で追加します。ソースファイルを右クリックして、追加(D) - 新しい項目(W)...です。ファイル名はプロジェクト名.def (TestDll.def) で作成。 中身は以下のように記述します。 LIBRARY EXPORTS   TestFunc  @1 ここで記述された関数が他のアプリから呼べる関数になります。@1は関数が複数ある場合に@1,@2,@3と連番をつけてあげます。 以上でビルドすれば..\Debugに TestDll.dll と TestDll.lib が作成されます。 他のアプリにリンクする場合は、自分で作ったTestDll.h を含めてこの3ファイルが必要になります。 もちろん実行時はTestDll.dllだけexeと一緒になってればよいです。 次にアプリケーション側から使う場合です。 Win32のコンソールアプリを作ってください。 プロジェクトのプロパティを開いて、VC++ディレクトリを選択して以下を行います。 ・インクルードディレクトリにTestDll.hが存在するディレクトリを追加 ・ライブラリディレクトリにTestDll.libが存在するディレクトリを追加 次にリンカーの入力を選択して追加の依存ファイルにTestDll.libを追加します。 以上です。あとはアプリで普通にDLLの関数が呼べます。 #include "stdafx.h" #include "TestDll.h" int _tmain(int argc, _TCHAR* argv[]) {   TestFunc();   return 0; } 実行するときにdllをexeと同じディレクトリに置くのを忘れないでください。 自前でDLLを作る場合は*.hと*.libと*.dllを1セットにするのが通常です。市販されているようなものもこの形式で提供されています。 この方法とは別にdllファイルしかない場合のリンク方法とか、動的にロードしたいとか、使う方法は複数ありますがとりあえず一番簡単な方法は上記の方法ですよ。

その他の回答 (3)

回答No.3

"シンボルのエクスポート"にチェック入れておけば「ひな形」吐いてくれますよ?

回答No.2

> それはわかっています なにがわからんですか? #ifndef DLL_SAMPLE_H__ #define DLL_SAMPLE_H__ #ifdef DLL_SAMPLE_EXPORTS #define ABC_EXPFUNC __declspec(dllexport) #else #define ABC_EXPFUNC __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif ABC_EXPFUNC void __stdcall TestFunc(); #ifdef __cplusplus } #endif #endif ...などなど。

回答No.1

Win32プロジェクトで"DLL"を選択します。

IrohaKujoh
質問者

補足

それはわかっています

関連するQ&A

  • 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を作成することができますか?

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

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

  • VC++で作成したDLLについて

    すみません、 VC++6.0で作成したDLLについて教えていただきたいのですが。 TEST_A.DLLというDLLと、TEST_B.DLLというDLLファイルを作成したとして これをC:\TEST\DLL\に格納してるとします。 このとき、TEST_B.DLLからはTEST_A.DLLの関数を呼び出しています。 次に、TEST_B.DLLの関数を使用しているTEST.EXEという実行ファイルを VB6.0で作成します。 このファイルをC:\TEST\EXE\に格納します。 そして、TEST.EXEを実行すると、 「TEST_B.EDLLが見付かりません」と言って怒られてしまいます。 VBでは、TEST_B.DLLをフルパスで指定しております。 しかし、TEST_A.DLLをEXEと同じ場所に置いてあげると 正常に動きます。 これは、TEST_B.DLLからTEST_A.DLLが見えていないということなのでしょうか? TEST_B.DLLの設定がおかしいのでしょうか? それとも、TEST.EXEでもTEST_A.DLLをフルパス指定してあげないといけないのでしょうか? ちなみに今回、プロジェクトマネージャーから「環境変数(PATH)の設定はしたくない」と言われていますので、PATHの指定はしてません。 すみませんが、どなたか教えていただけますでしょうか?

  • 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++で作成したDLLをVBから呼ぶと戻り値が化けてしまう

    はじめまして。いつも勉強させていただいております。 VCは今回初めてやっておりますので当たり前の質問 になってしまうかもしれませんがご教授願います。 以下のような仕様でものづくりを行っております。 1.VBよりVC++で作成したDLLを呼び出す。 2.VC++で作成したDLL側ではパラメータより取得した   値を元に足し算をした結果を   戻り値にセットして要求元に返却する。 といった流れで考えています。 2の部分についてはExeを一度作成し実行させた ところDOS窓に値が表示されました。(printfで) しかし、正しくOUTPUTされた値がVB側の戻り値と して返却された時点で参照すると「-6348」 となっています。 なぜこうなってしまうのか原因がわからず投稿 させて頂きました。 ご存知の方、ご教授下さい。 ************************************************* VC++ DLL側のソース ************************************************* #include <windows.h> #define DLL_EXPORT __declspec(dllexport) extern "C" { DLL_EXPORT int add(int a,int b); } int add(int a,int b) { return a+b; } ************************************************* VB  DLL呼び出し元 ************************************************* Option Explicit Private Declare Function add Lib "C:\Program Files\Microsoft Visual Studio\test\Debug\test.dll" Alias "_add@8" (a As Long, b As Long) As Integer Private Sub Command1_Click() Dim ret As Long ret = add(1, 2) MsgBox ret End Sub 環境 OS:WinXP 言語:VC++6.0    VB6.0(SP6)

  • VC++6.0で作成したクラスをVB6.0で使うには?

    初めて投稿します。 プログラミング初心者の為、初歩的な質問になるかもしれませんがご容赦下さい。普段、主にVisual Basic6.0(以下VB6.0)でプログラミングを行なっています。 VB6.0には演算子のオーバーロードする機能がない(?)ため、Visual C++6.0(以下VC++6.0)でプログラミングを行い、VC++6.0で作成したクラスをVB6.0で呼び出して使用したいと考えています。 インターネット上でいろいろと調べてみたのですが、その方法がわからず投稿させていただきました。VC++6.0で作成したDLLの中の関数をVB6.0で呼び出して使用する方法はわかったのですが、クラスということになると、DLLでは無理なのでしょうか? どなたか、VC++6.0で作成したクラスをVB6.0で呼び出す方法、または勉強方法(教材)などを教えていただけると助かります。 宜しくお願いいたします。

  • dllの作成方法について

    現在 http://www.kumei.ne.jp/c_lang/sdk2/sdk_119.htm のサイトを参考に、 dllの作り方について勉強しています。 dll01.cpp, dll01.hまでを書いて、コンパイルしようとしたのですが、 c:\users\kei\documents\visual studio 2005\projects\dll01\dll01.h(5) : error C2059: 構文エラー : '文字列' c:\users\kei\documents\visual studio 2005\projects\dll01\dll01.cpp(11) : error C2059: 構文エラー : '文字列' とでてきてコンパイルできません。 解決方法が全く分からず困っています。 どなたかご教授願います。 <環境>   Windows Vista Home Premium Visual C++ 2005 Express Edition

  • VS2010でC#のDLLを作成する手順

    Visual Studio 2010でVisual C#のコードのDLLを作成したいのですが 簡単なコード例で具体的な操作手順を教えていただけないでしょうか。 (Microsoft Visual Studio 2010、OS WindowXP) Visual C++でDLLを作成する手順については 「チュートリアル: ダイナミック リンク ライブラリの作成と使用 (C++)Visual Studio 2010 」 <http://msdn.microsoft.com/ja-jp/library/ms235636(v=vs.100).aspx> に詳しく手順が記載されていましたが、このVisual C#版が見たいのですが見当たりませんでした。 よろしくお願いします。

  • EXEにDLLファイルを同梱したいです。

    http://kidd0320.hatenablog.com/entry/2014/06/06/142355 EXEにDLLファイルを同梱するため、こちらのサイトを参考にしたのですが、ソフトを別のパソコンに入れたところ”MSVCP120D.dllがないため、プログラムを開始できません。” と表示されてしまいます。 開発環境はC++でOPENCVを使っています。 開発ソフトはMicrosoft Visual Studio Express 2013 for Windows Desktopを使っています。 構成はReleaseでプラットフォームはwin32です。 どうすればよいでしょうか。 どなたかご教授いただけないでしょうか。

  • 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で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)

専門家に質問してみよう