VBAからDLLを使用する


	以下の関数と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からの利用に関して

COM化したDLLとCOM化していないDLLとで、 VBAから利用する際の違いを、僕なりに理解しました。 (多分、VBAからの利用に限らないと思いますが)

COM化していないDLL ⇒基本的に、グローバル関数の呼出なので、ステートレスなメソッド呼出という感じ。  もちろん、グローバル関数の中で別途状態を管理すれば  ステートフルな挙動をさせることも可能ではあるが。

COM化したDLL ⇒グローバル関数の呼出ではなく、オブジェクトのメソッドを呼び出せる。  よって、ステートフルな挙動をさせることが出来る。

Perl,Physonなどからの利用に関して

COMインターフェースにしたがって、これらスクリプト言語からの呼出も可能