以下の関数とHOGE_Info型を定義 Public Declare Function getHOGEInfo _ Lib "c:\hoge\hoge.dll" _ (Info As HOGE_Info) As Long
Public Type HOGE_Info HogeName As String HogePassword As String * 100 CharSet As String * 20 SystemName As String End Type
以下のように、HOGE_Info型の変数にID,サーバー情報を設定した後、getHOGEInfoを実行 Sub sample() Dim Info As HOGE_Info With Info .HogeName = "repHoge" .SystemName = "SYBDFS1" End With
tmp = getHOGEInfo(Info)
With Info Range("out").Cells(1, 1) = .HogeName Range("out").Cells(2, 1) = .HogePassword Range("out").Cells(3, 1) = .CharSet Range("out").Cells(4, 1) = .SystemName End With End Sub
※COMにはしていない。 ※絶対パスを指定しているので、事前バインディングにて 参照設定しておく必要はないはず
COM化したDLLとCOM化していないDLLとで、 VBAから利用する際の違いを、僕なりに理解しました。 (多分、VBAからの利用に限らないと思いますが)
COM化していないDLL ⇒基本的に、グローバル関数の呼出なので、ステートレスなメソッド呼出という感じ。 もちろん、グローバル関数の中で別途状態を管理すれば ステートフルな挙動をさせることも可能ではあるが。
COM化したDLL ⇒グローバル関数の呼出ではなく、オブジェクトのメソッドを呼び出せる。 よって、ステートフルな挙動をさせることが出来る。
COMインターフェースにしたがって、これらスクリプト言語からの呼出も可能