プログラミング

VS 2005 Express Edition

2005年12月18日

 『ついにVisual Studio(VS)の一部無償提供が始まった』との情報に従って(知らなかった!)、Microsoft のページからダウンロードしてインストールしてみた。ダウンロードは1年間限定(2006年11月まで)であるが、この期間中にダウンロードをすませれば、期間が過ぎても使えるようである。
 Microsoftのプログラミングツールの入手は、1998年頃のVB5以来であるが、やはり使いやすい。ついでに.NET Framework ver2.0も入っているみたいなので、新しい機能も試せるかも知れない。

 で、早速 .NET v2.0 の新機能
Marshal.GetDelegateForFunctionPointer()』を用いたインラインマシン語を試してみた。ソースコードは以下の通り

Imports System
Imports System.Runtime.InteropServices
Public Class Form1
    Private Delegate Function MyAdd(ByVal x As Int32, ByVal y As Int32) As Int32
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '0x8B, 0x44, 0x24, 0x08, // mov eax,dword ptr [esp+8]
        '0x8B, 0x4C, 0x24, 0x04, // mov ecx,dword ptr [esp+4]
        '0x03, 0xC1,             // add eax,ecx
        '0xC2, 0x08, 0x00        // ret 8
        Dim myAddNativeCodeBytes As Byte() = New Byte() { _
            &H8B, &H44, &H24, &H8, _
            &H8B, &H4C, &H24, &H4, _
             &H3, &HC1, _
            &HC2, &H8, &H0 _
        }
        Dim myAddNativeCodeBytesPtr As IntPtr = IntPtr.Zero
        Try
            myAddNativeCodeBytesPtr = Marshal.AllocCoTaskMem(myAddNativeCodeBytes.Length)
            Marshal.Copy(myAddNativeCodeBytes, 0, myAddNativeCodeBytesPtr, myAddNativeCodeBytes.Length)
            Dim myAdd As MyAdd = CType(Marshal.GetDelegateForFunctionPointer(myAddNativeCodeBytesPtr, GetType(MyAdd)), MyAdd)
            Dim result As Int32 = myAdd(4, 5)
            MsgBox("Result: {0} " + CStr(result))
        Finally
            If Not (myAddNativeCodeBytesPtr = IntPtr.Zero) Then
                Marshal.FreeCoTaskMem(myAddNativeCodeBytesPtr)
                myAddNativeCodeBytesPtr = IntPtr.Zero
            End If
        End Try
    End Sub
End Class

実行結果は以下の通り。
4+5=9

うーん。これは使えるかも。

コメント

Katsumi (2006年2月1日 22:39:58)

VC++2005 でのWin32アプリケーションの作成に関しては、

Visual C++ Express Edition の導入
http://x.nest.jp/Windows/060117_2012.htm

Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/

が参考になった。ただし、上記一番目のリンク先でも述べられているが、『Win32 Console Application』を選択すると『Win32 Application Wizard』が現れるというのが分かりにくいけれど。

Katsumi (2007年7月24日 13:56:16)

このページへのスパムの攻撃が少なからずあるので、サーバへの負担を下げるためにコメント機能を停止します。

コメント送信