プログラミング

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

VB.NETでマシン語を使う2 [プログラミング]

2005年12月14日

 VB.NETによるDynaCallの原型になるテストプログラムが完成した。テストでは、MessageBoxAを呼び出すことに成功している。

VB.NETでマシン語を使う [プログラミング]

2005年12月14日

 現在のSFCは、Win32APIの殆どをVB.NET内で宣言する形になっている。これは、DynaWrapから脱却するための一つの方法であったのだが、逆にWin32API以外の関数をDLLから呼び出して実行することは出来ない(DynaWrapなら可能)。
 そこで、やはり最終的にはDynaCall様の物をVB.NET内に構築して実行する形にしたいと思っている。これには、DynaCallの様なインラインアセンブラが必要である。
 前に一度述べたようにこちらのページではインラインマシン語の使い方を紹介している。ただし、ver 2.0の.NET frameworkが必要で、これはまだβバージョンである。正式なver 2.0の登場が待てないので、別の形でインラインマシン語を利用する方法を考えてみた。

VC及びVBで一般的なコントロール [プログラミング]

2005年12月12日

 将来的にSFCにインクルード出来るようにするコントロールの参考に。

WSHでWin32APIを呼び出す-その16 [プログラミング]

2005年12月10日

参考:SFC mini
(←戻る)

 Windowsフォームを用いた次のようなHello WorldプログラムがSFCで作成できるようになった。

option explicit
Dim SFC
Set SFC = CreateObject("dwtools.NET.SFC")
Execute SFC.Initialize
Execute SFC.Include("<WinForm>")

Dim Form1
Set Form1=new WinForm
call Form1.AddControl(0,"STATIC","List1", _
                 WS_CHILD+WS_VISIBLE+SS_CENTER, _
                 100,50,300,30, 0)
call Form1.AddControl(0,"BUTTON","Command1", _
                 WS_CHILD+WS_VISIBLE+BS_PUSHBUTTON, _
                 100,100,300,30, "Command1_click")
Form1.Init
Form1.Show
wscript.quit(Form1.MsgLoop)

Sub Command1_click(hwnd,message,wparam,lparam)
  msgbox "Hello World!"
End Sub

今回の目玉としては、"Command1_click"という文字列を与えるだけで簡単にボタンのクリックイベントを登録できるところ。

実行画面
Hello World!

(追記)
このシリーズは、この記事をもって終了します。ここまで述べた一連のこととほとんど同じことは、SFC mini を用いれば行うことが出来ます。

WSHでWin32APIを呼び出す-その15 [プログラミング]

2005年12月9日

参考:SFC mini
(←戻る)

 SFCの完成形がようやく見えてきた。番外編で述べた、複数のファイルに分かれていたツールの本体を一つのDLLにまとめることも終えたし、EnumWindows等のコールバック関数を扱うAPIも使用可能になった。また、ボタンやリストコントロールなども表示できることを確認した。現在の所、このような簡単なコード

option explicit
Dim SFC
Set SFC = CreateObject("dwtools.NET.SFC")
Execute SFC.Initialize
Execute SFC.Include("<WinForm>")

Dim Form1
Set Form1=new WinForm
call Form1.AddControl(0,"STATIC","リストコントロール", _
                 WS_CHILD+WS_VISIBLE+SS_CENTER, _
                 100,50,300,30, 1)
call Form1.AddControl(0,"BUTTON","ボタンコントロール", _
                 WS_CHILD+WS_VISIBLE+BS_PUSHBUTTON, _
                 100,100,300,30, 2)
Form1.Init
Form1.Show
wscript.quit(Form1.MsgLoop)

で、次のようなウインドウが表示できる。

ボタンが表示できた!

また、SFCの説明ページも完成した。

(続く)

フリーなプログラミングツール [プログラミング]

2005年11月29日

Windows用のフリーソフトウエアのプログラミングツールを並べてみた。

WSHでWin32APIを呼び出す-番外編 [プログラミング]

2005年11月27日

 現在SFCをバージョンアップしている。VB.NETを使用した物に移行しており、順次必要ファイルをdwtools.NET.dllに統合中である。現在のところ(ver 0.3.0.2)、依存ファイルがdwtools.NET.dll, dwtools.dll, sfclodar.wsc, SFC.vbsの4つという、あまりかっこよくない状態になっているので、全ての機能をdwtools.NET.dll一つだけにまとめてしまう予定である。このうち、dwtools.dllはウィンドウプロシージャをこの方法でdwtools.NET.dllに取り込むという形で何とかなりそうで、あとは、sfcloader.wscによるSFC.vbsの読み込み部分の統合が残されているだけとなる。

VB.NETで関数ポインタの値を取得する2 [プログラミング]

2005年11月25日

(←戻る)

 前回の記事では、取得した関数ポインタの値が、ガベージコレクションにより変化する問題があった。これを、GCHandleを用いて、pinnedオブジェクトとして回避する方法を考えてみた。

VB.NETで関数ポインタの値を取得する [プログラミング]

2005年11月21日

 VB6で用いられていたAddressOf演算子による関数ポインタの取得等は、.NETではデリゲートという、より高機能なものに取って代わられたらしい。現在制作中のSFC for vbscriptは.NETを利用したものに移行しつつあるが、ここでは相変わらず関数ポインタが必要である。VB.NETでの関数ポインタの取得について色々と調べてみた。

WSHでWin32APIを呼び出す-その14 [プログラミング]

2005年11月19日

参考:SFC mini
(←戻る)

 いままでWin32APIの呼び出しに、DynaWrapを用いていた。DynaWrapの再配布の条件などを知るために色々な方に質問してみたが、このツールのライセンスがどうなっているかよく分からない。制作者の方とも連絡が付かないそうである。DynaWrapを改変した物をWeb上に見かけるが、以上の理由からそういった改変や再配布が合法的なのかどうかよく分からない状況である。
 そこで、DynaWrapから脱却することにした。Win32APIを呼び出す方法としては他に、VBなどでActiveXを作り、それを経由して行う方法が一般的なので、それをここでも用いることにした。
 vbscript を書く度にActiveXをコンパイルし直すのではSFCをツールとして制作している意味がないので、殆ど全てのWin32APIを含むActiveXをVB.NETを用いて作成することにした。出来たDLLのサイズは約500kbで、実用の範囲内に収まった。SFC自体の使用方法は以前と殆ど変わらず、上手くアップグレードできたと思う。この時点での最新バージョンは、ver 0.3.0.2(.NET frameworkが必要)。ちなみに、DynaWrapを用いたものの最終バージョンは、ver 0.2.0 であり、こちらはDynaWrapが要る代りに.NETは必要ない。

(SFC ver 0.3.0.2 はこちらから)

(SFC ver 0.2.0 はこちらから)

2005-12-08追記
 ver 0.3.0.2 は初期バージョンで、文字列の操作に不具合在り。 ver 0.3.1で修正されている。あと、ver 0.3.1は、ヘルプファイルも梱包。
(SFC ver 0.3.1 はこちらから)

(続く)
<<前の記事   後の記事>>