回答編集履歴
1
携帯からの投稿で要点だけだったのを、いろいろ追加
test
CHANGED
@@ -1 +1,57 @@
|
|
1
|
-
|
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"ではないから。ここを読む、って宣言してる。~~
|