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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++6.0 でのライブラリ参照方法
-
ソフト広告配信SoftAd をVBで
-
C# DLL エントリ ポイントが...
-
VBAエディタのコード画面で、カ...
-
WIN10で常にフォームを手前に
-
python エラー
-
<unistd.h>をVisualStudioでつ...
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
Excelのエラーで困ってます。
-
Makefile作成時の拡張子.oとは?
-
エクセルVBAではRound...
-
VC++6の「プロセスへアタッチ」...
-
VBAを何回も作り直して、容量が...
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
<math.h>があるのにsqrtが・...
-
HEWを使用しているのですが、こ...
-
VB2008で定数に色の設定をした...
-
セミコロンについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
res://ieframe.dll/について
-
ASP.NETのDLL入れ替えについて
-
VB6.0(SP6)にて開発を行なって...
-
WIN10で常にフォームを手前に
-
C# DLL エントリ ポイントが...
-
ファイルをvbaで圧縮したいので...
-
visual studioの不要なDll削除方法
-
手書き文字認識のdll
-
M365にアップデートしてからコ...
-
[VBA]64b版-行数表示.dllの登録...
-
VBAエディタのコード画面で、カ...
-
ベースアドレスの設定について
-
メイクファイルからdllを生成す...
-
VBからIMEパッドを呼び出す方法...
-
パソリからIDをVB6で読み込みた...
-
実行ファイルからソースファイ...
-
steamのゲームが起動しません。
-
APIの呼び出しDLLファイルの場...
-
指定された引数が有効範囲にな...
-
dllをいじる。。
おすすめ情報