Visual Basic

Excelのマクロでも利用されているVisual Basic。僕のプログラムはVisual Basicから始まった。

2007年4月18日

DLLの登録とVBSに関するメモ

DLLを登録するコマンド
regsvr32 (/s) DLLパス
→HKEY_CLASSES_ROOT\DLLファイル名.クラス名 で登録される

DLLの登録を削除するコマンド
regsvr32 /u(/s) DLLパス

DLLを外部から呼ぶ場合には呼び出すメソッドが必ずpublicである必要がある。

VBSから利用する場合
Set hogehoge = CreateObject("DLLファイル名.クラス名")
でロードして利用する

2006年12月28日

Visual Basicの罠

多くの言語では
false and c = 3
という評価式において、c = 3は実行されない。
これはfalseである時点で、この評価式が確実に失敗するため、c = 3を実行しても意味がないからである。

これを利用して、Perlではよく
open(IN, $filename) or die("ファイルの読み取りに失敗しました")
というのを見かける。これはopen関数が失敗したときにのみdie関数が呼ばれるという(ORの場合には左の式の戻り値がTRUEの時点で式全体がTRUEとなるため、右の式が実行されない。逆を言えば、左の式がFALSEを返すときだけ右の式が実行される)性質を利用したものである。
ところがである。

VBの言語使用においては、これらは利用されない。必ず左式も右式も評価されてしまう。
他の言語をやっていたときに陥りやすい罠のひとつといえよう。

2006年12月27日

Collectionの初期化

引き続きVBA(Visual Basic for Application)つながりで・・・

Collectionを初期化する方法が見つからなかったので、調べてみた。

Set XXX = New Collection
でいいらしい。できればclearメソッドなんていうのがあればいいんだが・・・

2006年12月15日

Visual Basicで連想配列と参照渡しを実現する

Visual Basicをはじめたときは連想配列とか、参照渡しなんて考えたことは一度もなかったが、他の言語を勉強して改めてVBをやり始めたらこれが出来ないなんて変だなぁって思ってしまったが、実は実現する方法があるらしい。

Dim HashData AS New Collection
HashData.Add Value Key
rData = HashData.Item(Value) 'Keyが返される

setData HashData 'HashDataを参照渡しする

'参照渡しするときにはVariantでなければならないらしい
Sub setData(ByRef Data As Variant)
Data.Add Value2 Key2
End Sub