プロが教えるわが家の防犯対策術!

プログラミングを始めたばかりです。
詳しく教えて下さい。

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

A 回答 (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ファイルしかない場合のリンク方法とか、動的にロードしたいとか、使う方法は複数ありますがとりあえず一番簡単な方法は上記の方法ですよ。
    • good
    • 1

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

    • good
    • 0

> それはわかっています



なにがわからんですか?

#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

...などなど。
    • good
    • 0

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

「VC++2010でdllファイルの作成に」の回答画像1

この回答への補足

それはわかっています

補足日時:2012/11/20 21:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!