お魚天国
< 2009/10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  2009/12 >
 
profile

うおきち
  1. 無料アクセス解析

category
recent entries
archives
recent comments
link
advertisement
爽快オンラインテニスゲーム『ファンタテニス』

三國志Online

鬼魂

セルフィッシング

SUN

声優

ナイトオンライン

女神転生IMAGINE



others
RSS

FC2ブログ
powered by FC2
 
応用情報処理技術
リアル | 2009/10/19 22:33
応用情報処理技術者試験、受けました
勉強時間足りなさ過ぎてもうムリポ

基本情報処理技術者試験
午前 勉強時間 100時間
午後 勉強時間 2時間

応用情報処理技術者試験
午前 勉強時間 10時間
午後 勉強時間 30分(試験日の昼休み)

・・・本来なら応用の方が勉強時間必要なはずなのに受かるわけない
5100円出費してくれた親ごめんなさい・・・夏休み遊んでばかりでごめんなさい・・・


さて、自己採点してみた

午前 64点 合格ライン60点
午後 64点 合格ライン60点

午前は配点率が統一されたから通っただろう
午後は記述のところ空白だらけだからかなり厳しい
もし通ったら万々歳、自惚れずに精進・・・


VB.NET:SetWindowLong
その他 | 2009/09/01 21:08
どうもご無沙汰してます
まぁアクセスログ眺めるとほとんどがMapleStoryの窓化多重起動で検索してやってきた人ばかりなので特に新しい記事を読んでもらってるとは思っておりません


さて、記事の内容に一貫性はありませんが今回はVB.NETの話
ふと、思い出したそれは・・さるべーじさんの「VB5:カクカクとリサイズしたい。」というもはや10年以上前の記事
これをVB.NETに移そうとしてもうまくいかなかった3,4年前。
ちょっとVB.NETで開発してた時にそのことを思い出したので再挑戦してみたら、
苦戦しながらもなんとか実装できた。

のでVB.NET用に変換したコードとして貼り付けておきます
面倒くさいので色付けはコメントのみに・・・

'コードの先頭に
Imports System.Runtime.InteropServices

'WindowsAPI関数の宣言
Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _
    (ByVal hWnd As Integer, ByVal nIndex As Integer, <MarshalAs(UnmanagedType.FunctionPtr)> ByVal dwNewInteger As fncKakuDragDelegate) As Integer
Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _
    (ByVal hWnd As Integer, ByVal nIndex As Integer, ByVal dwNewInteger As Integer) As Integer
Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" _
    (ByVal lpPrevWndFunc As Integer, ByVal hWnd As Integer, ByVal MSG As Integer, _
    ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
    (ByVal Destination As Integer, ByVal Source As Integer, ByVal Length As Integer)
Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
    (ByRef Destination As RECT, ByVal Source As Integer, ByVal Length As Integer)
Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
    (ByVal Destination As Integer, ByRef Source As RECT, ByVal Length As Integer)
'RECT構造体の宣言
Structure RECT
    Dim Left As Integer
    Dim Top As Integer
    Dim Right As Integer
    Dim Bottom As Integer
End Structure
'定数の宣言
Public Const GWL_WNDPROC = (-4)
Public Const WM_SIZING = &H214
'もともとのウィンドウ関数のアドレス
Public OldWp As Integer

'デリゲートの宣言
Delegate Function fncKakuDragDelegate( _
    ByVal hWnd As Integer, ByVal uMsg As Integer, _
    ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Public Function fncKakuDrag( _
    ByVal hWnd As Integer, ByVal uMsg As Integer, _
    ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    '*** フックしたメッセージの振り分けと対処
    Select Case uMsg
        Case WM_SIZING
            Dim wkRect As RECT
            Dim Length As Integer = Marshal.SizeOf(wkRect)
            MoveMemory(wkRect, lParam, Length)
            wkRect.Right = wkRect.Left + 250
            wkRect.Bottom = wkRect.Top + ((wkRect.Bottom - wkRect.Top) \ 50) * 50
            MoveMemory(lParam, wkRect, Length)
        Case Else
            Return CallWindowProc(OldWp, hWnd, uMsg, wParam, lParam)
    End Select
    Return 0
End Function

'フック開始
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    OldWp = SetWindowLong(Me.Handle.ToInt32, GWL_WNDPROC, AddressOf fncKakuDrag)
End Sub

'フック終了
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.FormClosed
    OldWp = SetWindowLong(Me.Handle.ToInt32, GWL_WNDPROC, OldWp)
End Sub



何がどう変わったのかは大体見比べてくれるとわかるんじゃないかと思います

・VB5でいうLong型はVB.NETでいうInteger型

・構造体の宣言の仕方はVB5と違うので修正

…あんまり細かく書くと結構長いので中略

・LenB関数はVB.NETにはないのでMarshal.SizeOf関数で構造体のバイトのサイズを取得する

・AddressOf演算子で取得する関数のアドレスはVB5では多分Long型だが、VB.NETではデリゲート型なのでDelegateキーワードでデリゲートを定義

○SetWindowLong関数の定義で第3引数をデリゲート型にする。

・MoveMemory関数の定義でなんでもOK?なAny型はVB.NETではできないので型をRECTにする。2つ宣言して片方はInteger、RECT、Integerで片方はRECT、Integer、Integerの引数にする

・RECT構造体を引数に渡す際、ByValキーワードだと値渡しになるので参照渡しのByRefキーワードに書き換える

…エトセトラ!


まぁそんなこんなで一番頭を抱えさせたのは上記の青色の文
最終的には第3引数に<MarshalAs(UnmanagedType.FunctionPtr)>という属性をつけることで解決しますが、この属性がなければCallbackOnCollectedDelegateというエラーが出る
コールバックが、型 なんちゃらかんちゃら のガベージ コレクションされたデリゲートで行われました。これは、アプリケーションのクラッシュ、破損、およびデータの損失を発生させる可能性があります。デリゲートをアンマネージ コードに渡すとき、デリゲートは 2 度と呼び出されないことが確実になるまでマネージ アプリケーションによって維持されなければなりません。
わけわかめ。

マネージってのは・・・まぁ.NET FrameWorkを利用するプログラム
アンマネージってのは従来のネイティブプログラム…ここではWindowsAPI、SetWindowLong関数のこと

SetWindowLongの第3引数にデリゲート型を指定すると、コールバックしてアンマネージコードからマネージコードに帰ってくるときにガベージコレクション…使用メモリの整理が行われるため、関数のアドレスがごっちゃになって?危険だよ…的な感じかな…?

とにかく、アンマネージな引数にしたいので、属性を指定すると、うまく動いた。

参考URL
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet28/vb6tonet28_03.html
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet23/vb6tonet23_01.html





痴漢
リアル | 2009/07/11 15:50
痴漢にあった

別にカワイイ女だったらいくらでも触らせてやるがおっさんでした
混雑気味の電車内で不自然な立ち位置から不自然に手が忍び寄りおいらのアレを甲で触れるおっさん
まぁまぁ、勘違いかもしれないと思い、始めは気にしてなかったが明らかに触ってきている
ウゼーとか思いながら次の駅で場所移動しようとしたら、漏れなくおっさんの手も途中までおいらのアレに付いてきてた

畜生!訴えておけばよかった!


基本情報処理技術者試験
その他 | 2009/05/27 00:23
合格キタ!

午前・午後ともに合格ライン60点で、

午前の単純正答率 79% 自己採点
午前得点 83.75点

午後の単純正答率 72% 自己採点
午後得点 80.00点

ウワーイ


テンプレ変更とその他諸々
その他 | 2009/04/24 16:22
学校からアクセスしてみると表示がずれていたので、
大きい画像でもずれないようなテンプレに変更しました




先週の日曜日、基本情報技術者試験受けてみますた
自己採点してみると、
午前の単純正答率 79%
午後の単純正答率 72%
午前は思ったより適当に選択したのが正解してた!
去年では午後が66〜69%の正答率で受かった人もいるみたい…ドキドキ
問題によって点数の重みが違うようなのでかなりギリギリのラインっぽい

まぁ、落ちたとしてもそのまま次の基本情報技術者試験リベンジ&応用技術者試験に挑戦すると思いますが…

勧めてくれたバッ○ありがとん




大学の方は…
勉強は、
解析学むずかしす…切断…?有界…?上界…?数列…ってこんなに難しかったっけ…?
うはwwwwプログラミング楽勝wwwwwww
ってな感じ
友達は、エスカレータ式で上がったので特に問題なし
恋愛は、ゆるりと進行中
バイトは、やらない

サークルは、
「ゲームプログラミングするぞ」的なのと、
「スノボーやるぞ、夏に海もいくぞ」的なのと、
「サッカーやろうぜ!」的なのに入る予定

まぁまぁ、思ってたより充実してるような気がする
下宿してる友達も作ったので、いつでもお泊り可だぜ!