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
...などなど。
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ファイルしかない場合のリンク方法とか、動的にロードしたいとか、使う方法は複数ありますがとりあえず一番簡単な方法は上記の方法ですよ。
お探しの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ランキング
-
コマンドラインで商用利用可能...
-
res://ieframe.dll/について
-
VBにてIMEの入力モードを変える...
-
ウインドウズxpの「ファイルを...
-
lame_enc.dllの外部関数について
-
dllをいじる。。
-
ボーランドC++でのDLL作成トラブル
-
kernel32.dllとshell32.dllが書...
-
実行ファイルからソースファイ...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
VBAを何回も作り直して、容量が...
-
C2146を回避するにはどうしたら...
-
unsigned long long 型のフォー...
-
C言語の規格
-
C言語をコンパイルするとコンピ...
-
win32api構造体引数の型指定に...
-
64ビットのlinuxで32ビットメモ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASP.NETのDLL入れ替えについて
-
visual studioの不要なDll削除方法
-
VB6.0(SP6)にて開発を行なって...
-
C# DLL エントリ ポイントが...
-
res://ieframe.dll/について
-
ファイルをvbaで圧縮したいので...
-
M365にアップデートしてからコ...
-
VBにてIMEの入力モードを変える...
-
WIN10で常にフォームを手前に
-
指定された引数が有効範囲にな...
-
VBAエディタのコード画面で、カ...
-
user32.dllがないためアプリが...
-
Excel2007のVBAで、セル範囲を...
-
VBからIMEパッドを呼び出す方法...
-
ボーランドC++でのDLL作成トラブル
-
VB.NET xdoc2txtをつかってPDF...
-
about:blankの削除したいのです...
-
shell32.dll のアイコンを使っ...
-
dllをいじる。。
-
USB機器のCプログラミングについて
おすすめ情報