[ カテゴリー » PC関連 ]

.NETで値が無い返り値

時々長さ0の文字列("")とは別に「結果が無い」という返し方をする関数を作らないといけないことがあります。またはあらゆる数値が結果になりえるので、ある特定値(0とか-1とか)を「結果が無い」という割り当てにできない関数とか。例としては、まだ名前の入力をしていないのと入力した結果空白だったとを区別しなければいけないなど。

SQLならばNULLと扱われる内容。SQLではNULLはいかなる数字でも長さ0の文字列でもなく、「値が無い」状態です。値が無いので等号・不等号で比較することすら禁止されています。

SELECT * FROM t1 WHERE name=NULL

は文法間違いですし、

SELECT * FROM t1 WHERE name=""

はnameがNULLであるレコードには引っかかりません(値なし=""は否なわけです)

以前なら(構造体とか使って)値を入れるのとは別に、値の有無を示す整数やブール値と二つの値をセットで返す関数を作ってたのですが、.NETではIntegerやStringも含めありとあらゆるものがクラス扱いされているので、オブジェクトが存在しないという状態Nothing(VB.NET)やnull(C++/C#.NET)が使えます。例えばVB.NETでは

Function foo() as String
  If a>0 Then
    foo = str1
  Else
    foo = Nothing
  End If
End Function
Function foo() as Integer
  If a>0 Then
    foo = int1
  Else
    foo = Nothing
  End If
End Function
という関数が定義できるわけです。これでstr1が長さ0を含むいかなる文字列でも、int1がどんな整数でも、それとは別に「値が無い」という結果を返すことができます。

まぁ、当たり前といえば当たり前なんですが^^;

— posted by mu at 08:53 pm   commentComment [0]  pingTrackBack [0]

Visual Studio.NETサービスのデバッグ

今度はVB.NETでWindowsサービスプログラムを作ろうとしていたりします。サービスとなると通常プログラムよりも表示や入力が制限される(基本的にやらない)ので、Visual Studio.NETのデバッガが利用できるのはかなり助かります。

Visual Studio.NETではサービスの作り方も楽になっていて、プロジェクトの種類にWindow applicationやDLLと並んでWindows Serviceなんてのが用意されているので、これを選びます。特集:初めて作る.NET Windowsサービス(ITmedia)Link なんかを参考にして、自動的に生成されるSystem.ServiceProcess.ServiceBaseのサブクラスのメソッドをコーディングするだけ。(まともに使えるサービスとなるといろいろ書く必要がありますが)

blog20070718VSdotNETServiceLogin

デバッグは通常プログラムとはちょっと異なります。blog.C#Link なんかを参考にしてますが、
  1. まずexeをビルド
  2. installutilコマンドでサービスとして登録
    • installutil.exeが通常パスの通ってないところにあります。スタートメニュー内のVisual Studioのツールフォルダにあるコマンドプロンプトを使うと、パスが通ってます
    • 管理者権限である必要があります。私の開発ユーザーIDはVS Developer+制限ユーザなので、上のコマンドプロンプトをAdministratorとして起動してます。
    • サービスの起動をUserに設定してた場合(Visual Studioプロジェクトのどこかで設定可能、忘れた;;)、ユーザーIDとパスワードを問われます。Windowsに登録してあるユーザーでいいのですが、ドメインを含めた[ドメイン]¥[ユーザー]で指定しないと登録に失敗します。ローカルマシンなら、.¥[ユーザー]で指定可能。
  3. コントロールパネルのサービスで、登録したサービスを起動
    • これも管理者権限でサービスマネージャを起動する必要があります。全体を通して管理者でやったほうがはるかに楽^^;
  4. exeをビルドしたプロジェクトを開き、ツールのプロセスにアタッチで起動したサービスを選択
    • これもVisual Studioを管理者権限で起動しておかないと、アタッチ後サービスへのアクセスが拒否されて、実質的にデバッグできません。結局管理者権限でやれということでしょうか? Visual StudioインストールするとVS Developerなんてユーザーグループ作るくらいだから、なんか別の方法がありそうですが・・・

これでデバッグ開始。ブレークポイントを設定しておけばそこで止まってくれます。デバッガーを止めるとサービスも止まってしまうので、またコントロールパネルで開始する必要があります。

— posted by mu at 08:38 pm   commentComment [0]  pingTrackBack [0]

デスクトップPCのケミコンが死んでた(3)

blog20070708ChemicalCondenserNew

これLink の続き。秋葉原の山王で日ケミの同容量ケミコンを購入。ここLink に書いてある親父のお勧めに注意というのが、なんとなく分かる。人間的にはいい親父に思うけど、理系人間を不安にさせるものがあるw 高々1000円ちょっとの買い物に1割引してくれるというのが、この商売の厳しさか元々ぼってるのか

交換後起動してみると、少なからずダメージが。オンボードの音源はスピーカーともども壊れてしまったようだし、メモリも1枚お亡くなり。それに気付かず電源入れたら異臭がして焦るΣ( ̄○ ̄) 見たら端子の一本焦げてた。

blog20070708PCThermalProfile

今回マザーを外すまでの大掛かりなメンテナンスとなったので、電源ファンを低速なものにし、CPUヒートシンクも埃を取ってシリコングリスを塗りなおし。電源ファンの風量が落ちたので温度上がるかと心配したのですが、逆にCPU温度が8度近くも下がってるΣ( ̄○ ̄) そりゃさ、埃も少々付いてたし、グリスも灰色に変色してたけど、いくらなんでも8度は下がりすぎ。いかに以前のグリスの塗り方がダメダメだったかを思い知らされる_| ̄|○

[2007/7/8 追記] DRAM一枚逝って512→256MBに。Windows 2000だから十分だと思ってたら、PSULink がHDDがんがん回って重い。急遽中古買ってきて512MBに戻す。

— posted by mu at 09:28 am   commentComment [0]  pingTrackBack [0]

デスクトップPCのケミコンが死んでた(2)

blog20070707ChemicalCondenserBroken

昨日Link の続き。破損しているケミコンがもう一個見つかり、計5個。今のマザーは無鉛半田が使用されていて融点が高く、ケミコンを引き抜くことはできても穴に埋まった半田が吸い取り線では取れやしない。千枚通しで埋まった半田を押し出す。

破損したケミコンを見ると全部GSCで、他の無事なのはTEAPO。コンデンサ会社の格付けLink とも合致するとても分かりやすい傾向w

友人と昼食を摂った後、秋葉原に買いに行く予定。ああ、後一日早く分かっていたらなぁ。

— posted by mu at 09:00 am   commentComment [0]  pingTrackBack [0]

デスクトップPCのケミコンが死んでた

blog20070706ChemicalCondenserBroken

パスポートの再申請Link の後、秋葉原へ。会社のPCのケミコンが破裂したので、交換品を購入のため。PC用のケミコンって瞬間的に大電流を流すことを要求されるので容量が大きい・内部抵抗が小さい・高速応答の上に、電圧は低くてもいいので小さいと特殊。低ESRと呼ばれる高性能のものが使われますが、会社にそんなものは無く。

ついでにこれLink の続き、CPU・GPUファンと並んで音のでかいと思われる電源ファンを低回転速にすべく、1600RPMの物を購入。あとFDDベイに内蔵するメモリカードリーダー(USBハブ付き)を。

で、帰宅して電源ファンを交換すべくPCを開けると・・・マザー上のケミコンが4つ死んでるΣ( ̄O ̄) この前ケースファン交換したときLink こんなの気付かなかったぞ。上部の腐食を見ると、昨日今日壊れたようには見えないしなぁ。ということは、この状態でも動くということ?

このマザーはSocketA/DDRメモリ/AGPバスなため、ここでマザーが逝ってしまうと主要部品全部買いなおしになってしまう・・・それは避けたい;;

てなわけで、明日また秋葉原に行くことになるのでした・・・

— posted by mu at 11:19 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0305 sec.
prev
2026.3
next
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 31