Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11257 / 13644 ツリー ←次へ | 前へ→

【17108】DLLの読み込み方法 ミント 04/8/23(月) 11:09 質問[未読]
【17109】Re:DLLの読み込み方法 IROC 04/8/23(月) 11:24 回答[未読]
【17110】Re:DLLの読み込み方法 ミント 04/8/23(月) 11:40 質問[未読]
【17112】Re:DLLの読み込み方法 IROC 04/8/23(月) 11:53 回答[未読]
【17113】Re:DLLの読み込み方法 ミント 04/8/23(月) 12:20 質問[未読]
【17114】Re:DLLの読み込み方法 IROC 04/8/23(月) 12:58 回答[未読]
【17116】Re:DLLの読み込み方法 ミント 04/8/23(月) 13:22 質問[未読]
【17117】Re:DLLの読み込み方法 IROC 04/8/23(月) 13:44 回答[未読]
【17120】Re:DLLの読み込み方法 ミント 04/8/23(月) 14:51 質問[未読]
【17122】Re:DLLの読み込み方法 IROC 04/8/23(月) 15:17 回答[未読]
【17127】Re:DLLの読み込み方法 でれすけ 04/8/23(月) 15:38 回答[未読]
【17137】Re:DLLの読み込み方法 ミント 04/8/23(月) 17:46 お礼[未読]

【17108】DLLの読み込み方法
質問  ミント  - 04/8/23(月) 11:09 -

引用なし
パスワード
   みなさん初めまして!
Excel VBAで質問があります。

DiskTopに、オリジナルのDLL「test.dll」を作りました。
このDLLを、VBAで使用したいのですが
どのように宣言すればよろしいのでしょうか。

ちなみにこのDLLは、test.txtの
sectionのアイテムの、"="から左側を消すDLLです。

test.txt---------------------------------------
[test1]
No = 1
Japanese = 90
English = 78

[test2]
No = 24
Japanese = 80
English = 90
 
  :
------------------------------------------------
で、このDllを使うことによって
Noを取り出したいとき「No = 1」という1行ではなく
「1」だけを取り出すDLLです。


説明が下手ですみません。。よろしくお願いします!

【17109】Re:DLLの読み込み方法
回答  IROC  - 04/8/23(月) 11:24 -

引用なし
パスワード
   >どのように宣言すればよろしいのでしょうか。

参照設定して、プロシージャを Call する。
ということでしょうか?

【17110】Re:DLLの読み込み方法
質問  ミント  - 04/8/23(月) 11:40 -

引用なし
パスワード
   >参照設定して、プロシージャを Call する。
>ということでしょうか?

参照設定ではなくて、ソースに直接表したいんです。
それで、DLLの処理が行えるようにしたいんです。
なんか説明不足ですみません。

【17112】Re:DLLの読み込み方法
回答  IROC  - 04/8/23(月) 11:53 -

引用なし
パスワード
   >DLLの読み込み方法

>参照設定ではなくて、ソースに直接表したいんです。
>それで、DLLの処理が行えるようにしたいんです。

DLLの中身を見たいということなのでしょうか?
でも、ご自分で作ったのですよね?
もとのDll作成前のプロジェクトファイルを見ればよいと思いますけど・・?

【17113】Re:DLLの読み込み方法
質問  ミント  - 04/8/23(月) 12:20 -

引用なし
パスワード
   >DLLの中身を見たいということなのでしょうか?
>でも、ご自分で作ったのですよね?
>もとのDll作成前のプロジェクトファイルを見ればよいと思いますけど・・?

DLLが、"="から左側を消す動作を行うものなのです。
だからVBAで、DLLを用いて、テキストファイルの処理を行いたかったんです。。


Private Declare Function Test Lib "test.dll" _
  Alias "TestA" (ByVal a As Long) As Long

と書いたらいいのでしょうか?

【17114】Re:DLLの読み込み方法
回答  IROC  - 04/8/23(月) 12:58 -

引用なし
パスワード
   DLLに、どのようなプログラムが含まれているのか分かりませんが、

>参照設定して、プロシージャを Call する。

だと、何が都合悪いのですか?

【17116】Re:DLLの読み込み方法
質問  ミント  - 04/8/23(月) 13:22 -

引用なし
パスワード
   Callのやり方を教えてください。。
ソース中にはなんと書けばよいですか??

【17117】Re:DLLの読み込み方法
回答  IROC  - 04/8/23(月) 13:44 -

引用なし
パスワード
   sub TextA (ByVal a As Long)
  '処理
end sub


DLLに上記のようなプロシージャがあるなら、

Call TextA(引数)


Functionプロシージャなら
戻り値 = TextA(引数)

【17120】Re:DLLの読み込み方法
質問  ミント  - 04/8/23(月) 14:51 -

引用なし
パスワード
   >Functionプロシージャなら
>戻り値 = TextA(引数)

>Functionプロシージャなら
>戻り値 = TextA(引数)

Private Declare Function Test Lib _
"C:\Documents and Settings\owner\デスクトップ\test.dll" _
(ByVal strTest As String) As String

とやって

Worksheets(1).TextBox1.Text = Test(No = 1)

と行い、テキストボックスに値を返そうとしたところ、

ファイル名が存在しません C:\Documents and Settings\owner\デスクトップ\test.dll
と出ます。
確かに、デスクトップにtest.dllは存在するのですが…
ご回答よろしくお願いします。

【17122】Re:DLLの読み込み方法
回答  IROC  - 04/8/23(月) 15:17 -

引用なし
パスワード
   参照設定したの?

【17127】Re:DLLの読み込み方法
回答  でれすけ  - 04/8/23(月) 15:38 -

引用なし
パスワード
   こんにちわ

そのDLLをどうやってつくったかということにもよるので、
ミントさんからその部分の説明がありませんので、
なんとも曖昧な答えになってしまいます。

で、自分で持ってる環境の場合だけで説明します。

もしVB6でDLLをつくったとすると、VB6ではActiveXDLLしか作れなくて、
VB6のプロジェクトのクラスモジュールの中にFunctionが書いてあると
思います。

この場合、エクセルのVBA側では、VB6で作ったActiveXDllを参照設定して、
呼び出しのコードは、

Sub sample

Dim MyClass as New Class1 ' ここはVB6のプロジェクトのクラス名です    
Worksheets(1).TextBox1.Text= myClass.Test("No=1")

End Sub

というようなコードになります。
この場合は、Declareステートメントは必用ありません。

で、さて

FortranとかDelphiとかでActiveXDllではないDLLを作った場合、
参照設定しても駄目で、WindowsAPIを呼ぶときと同じように、
Declareステートメントで定義してやって呼び出すことになります。

で、ですね、そのとき

Private Declare Function Test Lib _
"C:\Documents and Settings\owner\デスクトップ\test.dll" _
(ByVal strTest As String) As String

Libの部分のパスにスペースが含まれているとうまくいかないです。
デスクトップではなくて適当なドライブのパス名にスペースが含まれない
場所にDLLを移動してためしてみてください。

おそらく今までとは違うエラーがでると思います。
(関数の呼び出し方が定義の部分とちがってますから)

とりあえず以上です。

【17137】Re:DLLの読み込み方法
お礼  ミント  - 04/8/23(月) 17:46 -

引用なし
パスワード
   IROCさん、でれすけさんありがとうございました。

参照設定ではExcel VBAではどうしても読み込んでくれなくて
だめでした。。

そこで
Dim obj As TestLib.abctest
Set obj = New TestLib.abctest

abctestというVBで作成したものにDLLのリンク付けを行い、
abctestのオブジェクトを指定したらできました。


IROCさんへ
なんかわけのわからない質問ばっかりして本当にすみませんでした。

それでは失礼します。

11257 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free