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()』を用いたインラインマシン語を試してみた。ソースコードは以下の通り
実行結果は以下の通り。
うーん。これは使えるかも。
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
実行結果は以下の通り。
うーん。これは使えるかも。
コメント
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』が現れるというのが分かりにくいけれど。
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)
このページへのスパムの攻撃が少なからずあるので、サーバへの負担を下げるためにコメント機能を停止します。