4回目のブログですが、「Windowsでダイナミックリンクライブラリdllを作ったり使ったりする方法。」に続いて、CygwinではなくVisual Studioを使ってdllを作成する方法を書きます。
使ったのは、Visual Studio 2012 Express Editionです。
Visual StudioでDLLプロジェクトを作る。
「Win32プロジェクト」としてプロジェクトを作成し、Win32アプリケーションウィザードの中でアプリケーションの種類を「DLL」にします。そして、シンボルのエクスポートにチェックを入れます。
これだけで、ひとまずプロジェクトが作れてしまうので、あとは必要な部分を記述していくだけです。テンプレートプロジェクトの書き換えるべき場所に、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
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を作ったり使ったりする方法。
コメント
[…] Visual Studioでダイナミックリンクライブラリdllを作ったり使ったりする方法。 […]
[…] Visual Studioでダイナミックリンクライブラリdllを作ったり使ったりする方法。 […]