Visual Studioでダイナミックリンクライブラリdllを作ったり使ったりする方法。

4回目のブログですが、「Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。」に続いて、CygwinではなくVisual Studioを使ってdllを作成する方法を書きます。

使ったのは、Visual Studio 2012 Express Editionです。

Visual StudioでDLLプロジェクトを作る。

「Win32プロジェクト」としてプロジェクトを作成し、Win32アプリケーションウィザードの中でアプリケーションの種類を「DLL」にします。そして、シンボルのエクスポートにチェックを入れます。

スクリーンショット 2013-10-25 12.10.54

これだけで、ひとまずプロジェクトが作れてしまうので、あとは必要な部分を記述していくだけです。テンプレートプロジェクトの書き換えるべき場所に、TODOがつけられていますので、あまり迷うことはないです。

ヘッダーの記述

DLLにシンボルを出力するためには、目印をつけなればいけないそうです。この目印は、XXX_APIのような形でテンプレートに出力されているので、それを利用できます。下記のように通常の関数定義に加えて、頭にXXX_APIを添えます。

// 以下の ifdef ブロックは DLL からのエクスポートを容易にするマクロを作成するための 
// 一般的な方法です。この DLL 内のすべてのファイルは、コマンド ラインで定義された WIN32PROJECT2_EXPORTS
// シンボルを使用してコンパイルされます。このシンボルは、この DLL を使用するプロジェクトでは定義できません。
// ソースファイルがこのファイルを含んでいる他のプロジェクトは、 
// WIN32PROJECT2_API 関数を DLL からインポートされたと見なすのに対し、この DLL は、このマクロで定義された
// シンボルをエクスポートされたと見なします。
#ifdef WIN32PROJECT2_EXPORTS
#define WIN32PROJECT2_API extern "C" __declspec(dllexport)
#else
#define WIN32PROJECT2_API extern "C" __declspec(dllimport)
#endif
 
WIN32PROJECT2_API int hello(void);

実装を書く

続いて、その関数定義に対する実装を書きます。他のブログに書いたものと同じサンプルコードです。

// Win32Project2.cpp : DLL アプリケーション用にエクスポートされる関数を定義します。
//
 
#include "stdafx.h"
#include "Win32Project2.h"
#include <stdio.h>
 
WIN32PROJECT2_API int hello(void) {
	printf("hello world");
	return 0;
}

あとはビルドをかければ、DLLが出力されます。Cygwinにも依存しなくなりいい感じですが、Visual C++のランタイムライブラリに依存するような気がします。

DLLの使い方は、「Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。」と同じになるので、省略します。

各プラットフォームの動的ライブラリを作るシリーズ

Mac OSXの場合: Mac OSXでダイナミックライブラリdylibを作ったり使ったりする方法。
Linuxの場合: Linuxで共有ライブラリsoを作ったり使ったりする方法。
Windowsの場合: Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。

About katty0324

Scroll To Top