2006年04月02日

マルチメディアタイマ

某掲示板に触発されて、ついマルチメディアタイマを使ったタイマクラスを書いてしまいました。

タイマが独自スレッドで動くことから、System.Timers.Timer とほぼ同じ構成にしています。私自身は VS を滅多に使わないから割と無駄っぽいですが、既定のプロパティやイベントを設定してみたり、コンポーネントを D&D した時点で SynchronizingObject が自動的に設定されるようにしてみたり、とちょっとしたコンポーネント作成のお勉強と言った雰囲気。

ドキュメントは WinXP 対象に書いてますが、9x 系ではマルチメディアタイマの挙動が微妙に違うらしいので要注意です。

今回は、コンポーネントをデザイナ画面に D&D したときに自動的にプロパティを設定するにはどう実装するかを考察してみましょう。

追記(06/04/02)この MultimediaTimer クラスは、速攻で改訂版が出ました。こっちのは残していますが使うべきではありません。

続きを読む
posted by Hongliang at 00:01| Comment(0) | TrackBack(1) | .NET | このブログの読者になる | 更新情報をチェックする

2006年03月27日

意義は知らないけれど

某スレ主氏に捧ぐ(でもとても奨められたもんではないので見せられない)コード。

Module FormManager
  Private forms As New Dictionary(Of Type, Form)
  Public Function GetForm(Of TForm As Form)( _
           ParamArray args As Object()) As TForm
    Dim t As Type = GetType(TForm)
    If (Not(forms.ContainsKey(t)) _
        OrElse forms(t).IsDisposed) Then
      Dim form As TForm _
          = DirectCast(Activator.CreateInstance(t, args), _
                       TForm)
      forms(t) = form
      Return form
    End If
    Return DirectCast(forms(t), TForm)
  End Function
End Module
posted by Hongliang at 19:50| Comment(0) | TrackBack(0) | VB.NET | このブログの読者になる | 更新情報をチェックする

動的なDLLインポート

連載が終わった途端放置気味。意味もなく五七五で始めてみました。

コメント欄でちょっと話の出たホットキーの記事を書こうと思っていたのですが、調べれば調べるほど(本筋とは関係のないところで)難しい話になっていったので、後回し。いつになるかは未定義です。こだわりさえ捨てればいいんですが。

今回のネタはまさにネタですが、動的にアンマネージド DLL をインポートするってどうよ、と言う話です。

アンマネージド関数のインポートは通常 DllImport 属性(あるいは VB.NET なら Declare 構文)を使いますが、これを使用してインポートするには DLL 名とエントリポイントを静的に決定しておかなければなりません。これでは例えば統合アーカイバプロジェクトの DLL を使うにも、別の DLL に対しては別の関数を使わざるを得ず、あまり嬉しくない状況です。

続きを読む
posted by Hongliang at 16:00| Comment(8) | TrackBack(1) | .NET | このブログの読者になる | 更新情報をチェックする

2006年03月20日

COM クライアント実装の道程 for TaskScheduler その最終回

さて一連のシリーズもいよいよ最終回。最後は TaskScheduler クラスの使い方をつらつら書いていくことにしましょう。

続きを読む
posted by Hongliang at 22:11| Comment(3) | TrackBack(0) | .NET | このブログの読者になる | 更新情報をチェックする

2006年03月18日

COM クライアント実装の道程 for TaskScheduler その8

いよいよ連載も大詰め。TaskTrigger について解説していきましょう。

その前にまずは大元の TASK_TRIGGER 構造体を解説しなければなりません。TASK_TRIGGER 構造体はこれまで述べたとおりタスクの起動するタイミング(トリガ)を記述する構造体で、この構造体一つであらゆるトリガを表現します。そのため、TASK_TRIGGER は以下のメンバを持ちます。

  • 自身がどの種類の起動タイプなのかを表す TASK_TRIGGER_TYPE 列挙体の値
  • その起動タイプに固有の値を持つ TRIGGER_TYPE_UNION 共用体
続きを読む
posted by Hongliang at 21:03| Comment(2) | TrackBack(1) | .NET | このブログの読者になる | 更新情報をチェックする

2006年03月16日

COM クライアント実装の道程 for TaskScheduler その7

仕様を策定する人って絶対暇人ですよね。

前回の続きと言うことで、ITask に関するいくつかの実装を見ていきましょう。

まずは TaskScheduler クラスと同じく、Task クラスの基礎実装を。まあ ComInterfaceWrapper を継承して、内部で使用するインターフェイスを private プロパティにするだけですから同じですけど。ただ、コンストラクタは構成からして外部に公開する必要はないので、internal/Friend としておきます。ITask は単独で作成できますが、それは認めない方向で。

続きを読む
posted by Hongliang at 22:29| Comment(0) | TrackBack(0) | .NET | このブログの読者になる | 更新情報をチェックする

ここ(hongliang.seesaa.net)で公開しているものについて、利用は自由に行って頂いて構いません。改変、再頒布もお好きになさって下さい。利用に対しこちらが何かを要求することはありません。

ただし、公開するものを使用、または参考したことによって何らかの損害等が生じた場合でも、私はいかなる責任も負いません。

あ、こんなのに使ったってコメントを頂ければ嬉しいです。

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。