Archive for 5月 13th, 2012
-
Hello, COM(VBA) World!
Posted on 5月 13th, 2012 by cx20
COM(VBA)
COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
COM を用いて開発された部品であれば言語を問わず利用することができる。
以下は VBA による COM クライアント(事前バインディングならびに実行時バインディング)の例となっている。ソースコード(事前バインディング)
Sub Main() Dim shell As New Shell32.shell Dim vRootFolder vRootFolder = Shell32.ShellSpecialFolderConstants.ssfWINDOWS Dim folder As Shell32.folder Set folder = shell.BrowseForFolder(0, "Hello, COM(VBA) World!", 0, vRootFolder) If Not folder Is Nothing Then Set folder = Nothing End If Set shell = Nothing End Sub
事前バインディング(参照設定)の設定有無は、以下のコードで確認することが可能である。
ソースコード(参照設定確認)
Sub ShowReferences() Dim vbp Set vbp = ActiveWorkbook.VBProject Dim ref For Each ref In vbp.References If ref.BuiltIn = False Then Debug.Print "[" & ref.Name & "]" Debug.Print "GUID : [" & ref.GUID & "]" Debug.Print "FullPath : [" & ref.FullPath & "]" Debug.Print "Description : [" & ref.Description&; "]" Debug.Print "" End If Next End Sub
実行結果(参照設定確認)
[stdole] GUID : [{00020430-0000-0000-C000-000000000046}] FullPath : [C:\Windows\system32\stdole2.tlb] Description : [OLE Automation] [Office] GUID : [{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}] FullPath : [C:\Program Files\Common Files\Microsoft Shared\OFFICE14\MSO.DLL] Description : [Microsoft Office 14.0 Object Library] [Shell32] GUID : [{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}] FullPath : [C:\Windows\system32\shell32.dll] Description : [Microsoft Shell Controls And Automation]
ソースコード(実行時バインディング)
Sub Main() Dim shell Set shell = CreateObject("Shell.Application") Dim vRootFolder vRootFolder = 36 ' ssfWINDOWS Dim folder Set folder = shell.BrowseForFolder(0, "Hello, COM(VBA) World!", 0, vRootFolder) If Not folder Is Nothing Then Set folder = Nothing End If Set shell = Nothing End Sub
実行結果
+----------------------------------------+ |Browse For Folder [X]| +----------------------------------------+ | Hello, COM(VBA) Wolrd! | | | | +------------------------------------+ | | |[Windows] | | | | +[addins] | | | | +[AppCompat] | | | | +[AppPatch] | | | | +[assembly] | | | | : | | | | : | | | | : | | | +------------------------------------+ | | [Make New Folder] [ OK ] [Cancel] | +----------------------------------------+
-
Hello, COM(VB6) World!
Posted on 5月 13th, 2012 by cx20
COM(VB6)
COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
COM を用いて開発された部品であれば言語を問わず利用することができる。
以下は VB6 による COM クライアント(事前バインディングならびに実行時バインディング)の例となっている。ソースコード(事前バインディング)
Sub Main() Dim shell As New Shell32.shell Dim vRootFolder vRootFolder = Shell32.ShellSpecialFolderConstants.ssfWINDOWS Dim folder As Shell32.folder Set folder = shell.BrowseForFolder(0, "Hello, COM(VB6) World!", 0, vRootFolder) If Not folder Is Nothing Then Set folder = Nothing End If Set shell = Nothing End Sub
以下、プロジェクトファイルより一部抜粋。
プロジェクトファイル(事前バインディング)
Type=Exe Reference=*G{00020430-0000-0000-C000-000000000046}#2.0#0#WINDOWSsystem32STDOLE2.TLB#OLE Automation Reference=*G{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}#1.0#0#WINDOWSsystem32SHELL32.dll#Microsoft Shell Controls And Automation Module=Hello; Hello.bas Startup="Sub Main" ExeName32="hello.exe" Name="HelloProject"
ソースコード(実行時バインディング)
Sub Main() Dim shell Set shell = CreateObject("Shell.Application") Dim vRootFolder vRootFolder = 36 ' ssfWINDOWS Dim folder Set folder = shell.BrowseForFolder(0, "Hello, COM(VB6) World!", 0, vRootFolder) If Not folder Is Nothing Then Set folder = Nothing End If Set shell = Nothing End Sub
コンパイル方法
C:¥> vb6 /make Hello.vbp
実行結果
+----------------------------------------+ |Browse For Folder [X]| +----------------------------------------+ | Hello, COM(VB6) Wolrd! | | | | +------------------------------------+ | | |[Windows] | | | | +[addins] | | | | +[AppCompat] | | | | +[AppPatch] | | | | +[assembly] | | | | : | | | | : | | | | : | | | +------------------------------------+ | | [Make New Folder] [ OK ] [Cancel] | +----------------------------------------+