回答編集履歴

1

携帯からの投稿で要点だけだったのを、いろいろ追加

2019/05/30 12:30

投稿

Q71
Q71

スコア995

test CHANGED
@@ -1 +1,57 @@
1
- ここ載せコードが正なら、配置場所が "D:\YobidasiExe\DLLTEST01.dll"ではないから。ここを読む、って宣言してる。
1
+ 質問文書いことと、本当に解決しなければならない問題が違ってように思います
2
+
3
+ 追記5以前の質問文から私が理解した内容:
4
+
5
+ - アプリケーションAに、機能Fを追加したい。
6
+
7
+ - 機能Fは以前に開発しており、F.DLLにまとめてある。
8
+
9
+ - お客様の端末に、F.DLLを配置するだけでアプリケーションAに機能Fを追加できるか。
10
+
11
+
12
+
13
+ この問題の解答は、「No」です。肝は「F.DLLを配置するだけ」。アプリケーションAに機能Fを追加するには、アプリケーションAを改修しなければならない。しかし、配置するのはF.DLLだけ。アプリケーションAに機能追加されるはずがない。
14
+
15
+ これをするなら、たとえば画像表示ソフトで表示できる画像フォーマットを増やすの様に、関数の入出力を(ついでに関数名も)決めておきます。画像表示ソフトは、BMP.DLLやGIF.DLLから`Bitmap Load(String filename)`の様な関数を呼び出します。アプリケーションAが「特定のディレクトリからDLLを検索し、すべてを確認して適したものを呼び出す」様に作成されていれば、特定のディレクトリにDLLを配置するだけで「*フォーマットを読む」という機能を追加できます。
16
+
17
+
18
+
19
+ 本当に解決しなければならない問題は、こんな感じじゃないですか?
20
+
21
+ - エクセルVBAで、機能Fを使いたい。
22
+
23
+ - 機能Fは以前に開発しており、F.DLLにまとめてある。
24
+
25
+ - 開発環境で、`Declare`文によりF.DLL内の関数を呼び出すようにし、実行できた。
26
+
27
+ - お客様の端末(確認用端末)に、エクセルファイルとF.DLLを配置したが、機能Fが動作しなかった。
28
+
29
+ - 開発環境のように、お客様の端末で、エクセルVBAから機能Fを呼び出すには、どうすれば良いか?
30
+
31
+ - また、できるだけ配置の手数を少なくする(配置を間違えなく行う)には、どうすれば良いか?
32
+
33
+
34
+
35
+ 質問に対する解答は、質問に付けられる条件によって変わります。
36
+
37
+ 条件は文章で書くより、箇条書きで書く方が伝わりやすいです。
38
+
39
+ F.DLLが、C#で作られているのか、C++で作られているのかで、大きく異なります。C#(VB.NET, C++/CLI)で作られたものは、COM登録が必要です。C++ で作られたものは、不要です。VB6.0 以前については、わかりません。
40
+
41
+ 範囲を広げすぎ、あるいは焦点を絞っていないので質問がぼやけ、解答を得られにくくしています。
42
+
43
+
44
+
45
+ > ```
46
+
47
+ > Private Declare Function ADD Lib "D:\YobidasiExe\DLLTEST01.dll" (a As Long, b As Long) As Long
48
+
49
+ > ```
50
+
51
+
52
+
53
+ 当然、エクセルファイルとDLLを配置する場所も`D:\YobidasiExe\`ですよね?
54
+
55
+ このコードで、「`C:\Tools`に配置したが、実行時エラー53がでる。」なら、当然です。フルパスで指定しているのですから、それ以外のところは探しません。
56
+
57
+ ~~ここに載せてあるコードが正しいなら、配置場所が "D:\YobidasiExe\DLLTEST01.dll"ではないから。ここを読む、って宣言してる。~~