MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
ライブラリの基礎 - DLLの作成(C/C++/MFC)のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
ライブラリの基礎 - DLLの作成(C/C++/MFC)
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == MFCを使ったDLLには、以下の2つの種類がある。<br> # 1つ目は"拡張DLL"で、DLLを使用するEXEやDLLもMFCで作成する時にのみ使うことができる。 # 2つ目は"MFCの共有DLLを使用"(Regular DLL)で、これは内部的にMFCそのものを持っているため、DLLを使用するEXEやDLLをMFCで作成しなくても使用できる。 <br><br> == DLLの作成方法(defファイルを作成する) == defファイルを作成する方法を記載する。<br> <span style="color:#C00000">'''※C++でDLLを作成する場合は、defファイルを作成する方法を強く推奨する。'''</span><br> <br> defファイルを作成しない方法では、DLLの関数をエクスポートするために"__declspec"キーワードを使用したが、関数のエクスポートは"defファイル"を利用することでも可能である。<br> "defファイル"によるエクスポートを採用した場合、 エクスポート関数名にキーワードを付ける必要は無い。<br> <br> '''※ C#等で作成したEXEまたはDLLからMFC DLLを呼び出す場合、MFC DLLでは”defファイル”を使用すること'''<br> '''※ defファイルとは、DLLがエクスポートする関数を記述したファイルのことである。'''<br> ''' [追加]→[新しい項目]を押下して、[新しい項目の追加]ダイアログにて”xxx.def”を追加するとdefファイルが作成される。'''<br> <br> [プロジェクト]メニューの[プロパティ]を押下して、プロパティダイアログを表示する。<br> プロパティダイアログの[リンカー]→[入力]の[モジュール定義ファイル]に使用するdefファイルの名前を記述する。<br> [[ファイル:MFC DLL 01.png|フレームなし|中央]] <br> defファイルを作成して、以下のようにエクスポートしたい関数を記載する。<br> '''※但し、"@1"等の序数値は記載しなくてもよい'''。<br> <source lang="c++"> MainDLL.def LIBRARY MainDLL EXPORTS SampleFunc @1 TestFunc @2 </source> <br> 次に、"MainDLL.h"ファイルは以下のように記載する。<br> <source lang="c++"> MainDLL.h #pragma once #ifndef _USRDLL #define DLL_EXPORT extern "C" __declspec(dllimport) #else #define DLL_EXPORT #endif DLL_EXPORT int __stdcall SampleFunc(int *lp1, int *lp2); DLL_EXPORT double __stdcall TestFunc(double *lp1, double *lp2); </source> <br> 最後に、"MainDLL.cpp"ファイルには以下のように記載する。<br> <source lang="c++"> MainDLL.cpp #include "Stdafx.h" #include "MainDLL.h" int __stdcall SampleFunc(int *lp1, int *lp2) { // 以下略 } int __stdcall TestFunc(double *lp1, double *lp2) { // 以下略 } </source> <br><br> == DLLの作成方法(defファイルを作成しない方法) == defファイルを作成しない方法を記載する。<br> <br> Visual Studioの[プロジェクト]→[プロパティ]を選択する。<br> [C++]→[プリプロセッサの定義]に"DLL"プリプロセッサを追加する。(“Stdafx.h”ファイルに”DLL”プリプロセッサを記載してもよい)<br> <br> まず、"MainDLL.h"ファイルの先頭に以下のソースコードを追加する。<br> <source lang="c++"> MainDLL.h // ファイルの先頭に以下を追加する。 #ifndef __MAINDLL_H__ #define __MAINDLL_H__ #ifdef DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif // 以下略 #endif //__MAINDLL_H__ </source> <br> 次に、上記の"MainDLL.h"ファイルにエクスポートしたい関数を以下のように記載する。<br> <source lang="c++"> MainDLL.h #ifdef __cplusplus extern "C" { #endif DLL_EXPORT int WINAPI SampleFunc(CString &p_rcStr, CWnd *p_pcWnd); #ifdef __cplusplus } #endif </source> <br> "MainDLL.cpp"ファイルの先頭に以下を記載する。<br> <source lang="c++"> MainDLL.cpp #include "StdAfx.h" #include "MainDLL.h" </source> <br> "MainDLL.cpp"ファイルにて関数を作成する時は、以下のように記載する。<br> <source lang="c++"> MainDLL.cpp extern "C" int WINAPI SampleFunc(CString &p_rcStr, CWnd *p_pcWnd) { // 以下略 } </source> <br><br> == Visual StudioでDLLを暗黙的リンクする方法 == EXEファイルのプロジェクトに、DLLファイルを暗黙的リンクする方法を記載する。<br> 例として、CppEXE.exeとCppDLL.dllが存在するものとして設定している。<br> <br> # まず、CppEXE.exeのプロジェクトを起動する。 # [プロジェクト]メニュー - [CppEXEのプロパティ] - [構成プロパティ] - [C/C++] - [全般] - [追加のインクルードディレクトリ]項目に、<br>CppDLL.dllのヘッダファイル(CppDLL.h)が存在するディレクトリを追加する。 # 次に、[構成プロパティ] - [リンカー] - [全般] - [追加のライブラリディレクトリ]項目に、<br>DLLのライブラリファイル(CppDLL.lib)が存在するディレクトリを追加する。 # 最後に、[構成プロパティ] - [リンカー] - [入力] - [追加の依存ファイル]項目に、CppDLL.libと記述する。 <br><br> __FORCETOC__ [[カテゴリ:MFC]]
ライブラリの基礎 - DLLの作成(C/C++/MFC)
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse