PowerShell Memo

このサイトはPowerShell(MSH/Monad)奮闘記です

管理人「newpops吉岡洋」が
「PowerShell(旧名:MSH/Monad)」の研究結果を日々綴っていきます。

【お知らせ】
この日記からPowerShellのTipsを抽出し「PowerShell FAQ」として整理しました。


2005-11-23

[]MonadからVB.NETのコードを実行

VBCodeProviderを利用すると、VB.NETのコードをMonadから実行できます。

例えば、Beta2のMonadではSTAスレッドで実行が必要なオブジェクトは動作しませんが、

VBCodeProviderを利用してVB.NETのコードを書けば、実現できるわけです。


インコードコンパイルでMsgBox関数を実行する

以下は、MsgBoxを実行するサンプルです。

$provider = new-object Microsoft.VisualBasic.VBCodeProvider
$params = new-object System.CodeDom.Compiler.CompilerParameters
$params.GenerateInMemory = $True
$refs = "System.dll","Microsoft.VisualBasic.dll","System.Data.DLL", `
"System.management.dll","System.DirectoryServices.dll"
$params.ReferencedAssemblies.AddRange($refs)

# VB.NET EXAMPLE
$txtCode = @'

Imports Microsoft.VisualBasic
Imports System
Imports System.Threading

Public Class VBDotNetTest
     Sub Main()
        MsgBox("MonadからVB.NETのコードを実行", 0, "タイトル")
     End Sub
End Class

'@

$results = $provider.CompileAssemblyFromSource($params, $txtCode)
$mAssembly = $results.CompiledAssembly
$i = $mAssembly.CreateInstance("VBDotNetTest")
$r = $i.main()