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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- C言語・C++・C# visual studioでフォームデザインを作成する時のVB.netとC#の違い 2 2023/06/22 03:04
- その他(コンピューター・テクノロジー) パソ粥が壊れてしまい。 新しく買ったパソコンに Amplitued5 Max をダウンロードインスト 1 2022/05/22 00:33
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
shell32.dll のアイコンを使っ...
-
res://ieframe.dll/について
-
ASP.NETのDLL入れ替えについて
-
VBにてIMEの入力モードを変える...
-
DLLの暗黙的リンクについてご教...
-
M365にアップデートしてからコ...
-
C# DLL エントリ ポイントが...
-
visual studioの不要なDll削除方法
-
最新 InstallShield CAB の編集
-
about:blankの削除したいのです...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<math.h>があるのにsqrtが・...
-
<unistd.h>をVisualStudioでつ...
-
math.hに含まれる関数が使えない
-
C言語をコンパイルするとコンピ...
-
実行後にコンパイルに失敗しま...
-
アプリケーションのDLLファイル...
-
VBAを何回も作り直して、容量が...
-
適切な変換関数が存在しない???
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
M365にアップデートしてからコ...
-
C# DLL エントリ ポイントが...
-
visual studioの不要なDll削除方法
-
res://ieframe.dll/について
-
ASP.NETのDLL入れ替えについて
-
C++製DLLにてVB.NET関数を引数...
-
VB6.0(SP6)にて開発を行なって...
-
ファイルをvbaで圧縮したいので...
-
WIN10で常にフォームを手前に
-
VB.NET xdoc2txtをつかってPDF...
-
VC++6.0 でのライブラリ参照方法
-
VB2003で レジストリを格納する
-
user32.dllがないためアプリが...
-
エクセル マクロで指定フォルダ...
-
vb6で作成した画面が処理に時間...
-
VBAエディタのコード画面で、カ...
-
[VBA]64b版-行数表示.dllの登録...
-
指定された引数が有効範囲にな...
-
Java hs_err_pid0000.log解析
-
メイクファイルからdllを生成す...
おすすめ情報