
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ファイルしかない場合のリンク方法とか、動的にロードしたいとか、使う方法は複数ありますがとりあえず一番簡単な方法は上記の方法ですよ。
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
...などなど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
指定された引数が有効範囲にな...
-
visual studioの不要なDll削除方法
-
VBAエディタのコード画面で、カ...
-
VB6.0(SP6)にて開発を行なって...
-
VB6 - DLLの動的リンクの方法に...
-
user32.dllがないためアプリが...
-
C# DLL エントリ ポイントが...
-
VB.NET xdoc2txtをつかってPDF...
-
ファイルをvbaで圧縮したいので...
-
vb6で作成した画面が処理に時間...
-
エクセル マクロで指定フォルダ...
-
res://ieframe.dll/について
-
ウインドウズxpの「ファイルを...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
” OS ビルド ” の意味が分か...
-
C言語でヘッダファイルにグロー...
-
デバッグ中のエラーのことで教...
-
VBAを何回も作り直して、容量が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0(SP6)にて開発を行なって...
-
ASP.NETのDLL入れ替えについて
-
user32.dllがないためアプリが...
-
visual studioの不要なDll削除方法
-
res://ieframe.dll/について
-
C# DLL エントリ ポイントが...
-
C++のdllの作り方を教えてく...
-
VC++6.0 でのライブラリ参照方法
-
ファイルをvbaで圧縮したいので...
-
vb6で作成した画面が処理に時間...
-
指定された引数が有効範囲にな...
-
VBAエディタのコード画面で、カ...
-
ptipi.dll に関し未解決問題
-
[マインクラフト] Javaが64bit...
-
VB.NET xdoc2txtをつかってPDF...
-
M365にアップデートしてからコ...
-
プロシージャエントリポイント ...
-
WIN10で常にフォームを手前に
-
エクセル マクロで指定フォルダ...
-
メイクファイルからdllを生成す...
おすすめ情報