INI ファイルと構成ファイルの読み書き
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/INIfile.aspx
今どきは構成ファイルがあるから、INIファイルはそんなに使う機会はないと思うのですが、覚え書きということで。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/INIfile.aspx
今どきは構成ファイルがあるから、INIファイルはそんなに使う機会はないと思うのですが、覚え書きということで。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/office.aspx
COMを使うことはまだまだありそうですし、Officeをコントロールしたいこともありそうです。
要は、参照設定をして普通にインスタンシングすればいいだけという話ではあるのですが。
用が済んだら、Marshal.ReleaseComObject 呼び出しを忘れずに。
#って私が忘れるんですけど。
MSDN Magazine Febrary 2005の記事を検証してみました。
http://msdn.microsoft.com/msdnmag/issues/05/02/BasicInstincts/default.aspx
といっても、メインのテーマではなくて、まずはMonitorクラスとSyncLockとの類似点(あるいは相違点)の確認。
#言うまでもなく、SyncLockはVisual Basic .NETのキーワード。C#ではlockです。
以下のような簡単なコードを書いてみました。
Pointを表す単純なクラスをMonitorを使う方法とSyncLockを使う方法とで比較するものです。
----------------------------------------------------------------
Imports System.Threading
Public Class PointMonitor
Private x As Integer
Private y As Integer
Sub New(ByVal x As Integer, ByVal y As Integer)
Me.x = x
Me.y = y
End Sub
Sub GetPointPosition(ByRef x As Integer, ByRef y As Integer)
Monitor.Enter(Me)
Try
x = Me.x
y = Me.y
Finally
Monitor.Exit(Me)
End Try
End Sub
Sub SetPointPosition(ByVal x As Integer, ByVal y As Integer)
Monitor.Enter(Me)
Try
Me.x = x
Me.y = y
Finally
Monitor.Exit(Me)
End Try
End Sub
End Class
Public Class PointLock
Private x As Integer
Private y As Integer
Sub New(ByVal x As Integer, ByVal y As Integer)
Me.x = x
Me.y = y
End Sub
Sub GetPointPosition(ByRef x As Integer, ByRef y As Integer)
SyncLock Me
x = Me.x
y = Me.y
End SyncLock
End Sub
Sub SetPointPosition(ByVal x As Integer, ByVal y As Integer)
SyncLock Me
Me.x = x
Me.y = y
End SyncLock
End Sub
End Class
----------------------------------------------------------------
これをビルド(Release Build)して、ディスアセンブラ(Ildasm.exe)を使って、実際にどのようなMSILコードが生成されたのか見てみました。
------ PointMonitorクラスのGetPointPositionメソッド ------
.method public instance void GetPointPosition(int32& x, int32& y) cil managed
{
// コード サイズ 32 (0x20)
.maxstack 2
IL_0000: ldarg.0
IL_0001: call void [mscorlib]System.Threading.Monitor::Enter(object)
.try
{
IL_0006: ldarg.1
IL_0007: ldarg.0
IL_0008: ldfld int32 LockTest.PointMonitor::x
IL_000d: stind.i4
IL_000e: ldarg.2
IL_000f: ldarg.0
IL_0010: ldfld int32 LockTest.PointMonitor::y
IL_0015: stind.i4
IL_0016: leave.s IL_001f
} // end .try
finally
{
IL_0018: ldarg.0
IL_0019: call void [mscorlib]System.Threading.Monitor::Exit(object)
IL_001e: endfinally
} // end handler
IL_001f: ret
} // end of method PointMonitor::GetPointPosition
----------------------------------------------------------
------ PointLockクラスのGetPointPositionメソッド ------
.method public instance void GetPointPosition(int32& x, int32& y) cil managed
{
// コード サイズ 34 (0x22)
.maxstack 2
.locals init (class LockTest.PointLock V_0)
IL_0000: ldarg.0
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: call void [mscorlib]System.Threading.Monitor::Enter(object)
.try
{
IL_0008: ldarg.1
IL_0009: ldarg.0
IL_000a: ldfld int32 LockTest.PointLock::x
IL_000f: stind.i4
IL_0010: ldarg.2
IL_0011: ldarg.0
IL_0012: ldfld int32 LockTest.PointLock::y
IL_0017: stind.i4
IL_0018: leave.s IL_0021
} // end .try
finally
{
IL_001a: ldloc.0
IL_001b: call void [mscorlib]System.Threading.Monitor::Exit(object)
IL_0020: endfinally
} // end handler
IL_0021: ret
} // end of method PointLock::GetPointPosition
-------------------------------------------------------
Monitorを使う方がわずかにコードサイズは小さいようですが、ほぼ違いはないと言っていいでしょう。結局SyncLockの方もコンパイルするとMonitor.Enterが使われていますし。
ということでSyncLockはMonitorを使ってロックする方法に対する簡単な記述を提供してくれるものだということがわかるわけです。
TryだのFinallyだの書かなくていいぶん、コードがシンプルで見やすくなりますね。
とすると、Monitor.Enterを使うのは、言語仕様としてSyncLock(やC#のlock)に相当するキーワードを持っていない言語製品の場合に限られると思っていいかもしれません。あとは、コードでSyncLockを使う場合、頭の中でほぼ等価なMonitor.Enterと置き換えてみて、ロジックの確認をしてみるのはいいことでしょうね。
ただし、SyncLockでは足りないこともあって、それはアクセスの競合が発生した場合のタイムアウトが必要な場合。この時はMonitor.TryEnterメソッドを使うことになります。
上記の記事はなかなか興味深い内容になっています。一読をお勧めします。
出ました、ClickOnceのセキュリティに関する記事。
#探せば前から他の情報があったのかもしれません。そうだったらすみません、勉強不足です。
2005でVisual Studioに追加された機能である、App.configのデザイン画面で設定すればいいようですね。
http://www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp
Visual Studio 2005ではSTLが.NET Framework上でも使えるようになるそうです。
そうですか、すみません、私はC++/CLI はまったくわかっていないので。
STLがどうとか言う前に、
ArrayList ^as = gcnew ArrayList;
という表記になじめないんですよねぇ。慣れの問題だというのはわかっているんですが。
Visual Studio 2005のコードサンプルです。
Code Samples
http://lab.msdn.microsoft.com/vs2005/downloads/code/
101 Samples for Visual Studio 2005
http://lab.msdn.microsoft.com/vs2005/downloads/101samples/default.aspx
FAQですが、インターフェイスのリファレンスを生成するためのコメントをソースコード中に埋め込むと、メンテナンス性が向上しますね。
久しぶりにコードを書いているので、コメントの要素をすっかり忘れていました。
備忘録として、参考になるページにリンクしておきます。
http://www.atmarkit.co.jp/fdotnet/teamdev/teamdev01/teamdev01_01.html
http://www.atmarkit.co.jp/fdotnet/teamdev/teamdev02/teamdev02_01.html
Using different versions of the same dll in one application
http://blogs.msdn.com/abhinaba/archive/2005/11/30/498278.aspx
これはいい。こんな方法があったんですね。
これがあれば万一のデグレード時に緊急対応できそうです。
#後ろ向きな利用は考えものですが(笑)
メソッドやプロパティの名前を実行時に解決したい時には、以下の方法で動的に呼び出します。
簡単なサンプルで見てみます。
呼び出されるクラスは以下の通り:
// 呼び出されるクラス class TestClass { // プロパティ private string myName = string.Empty; public string MyName { get { return myName; } set { myName = value; } } // 引数なしのメソッド // 引数ありのメソッド |
呼び出し側は以下の通り:
// 呼び出し方の例 class Program { static void Main(string[] args) { TestClass tc = new TestClass(); Type ttc = tc.GetType(); // 引数なしのメソッド // 引数ありのメソッド // プロパティの読み書き // Get |
ポイントは、
頻繁に使うテクニックではありませんが、こんなことができるということを覚えておくといいでしょう。
スクリプトなので微妙に開発ネタではないんですが。
http://www.microsoft.com/technet/technetmag/issues/2007/01/HeyScriptingGuy/default.aspx?loc=jp
VBScriptから .NET Framework のクラス(全部ではありませんが)を利用できますよ、という解説記事。
スクリプトは必要になる都度、やっつけて数行書くくらいで勉強してないので結構衝撃でした(恥)
面白いけど今となってはPowerShellがありますから。
(Vista用 PowerShell、早くカモーン!)
かなり無茶な操作なので、本当に必要な時だけ細心の注意を払って、自己責任でどうぞ。
http://msdn2.microsoft.com/ja-jp/library/twdecbsx(VS.80).aspx
アプリケーションを開発していると、たまにこういうことをする必要があるわけです(テストとかね)。
Writing a Useful Windows Service in .NET in Five Minutes
http://blogs.msdn.com/bclteam/archive/2005/03/15/396428.aspx
.NETを使ってWindowsサービスを作る手順を説明しています。
手順自体は大して難しくないんですけど、サービスは品質が命なので(そう簡単に落ちてもらっちゃ困るわけだし)神経使いますね。
それでも、ともかくスケルトンを作ること自体は "in Five Minutes" なので、その部分のハードルは高くないということです。
完全に自分のための覚え書き。
Virtual Earth 用 SDK の日本語対応だそうです。
http://msdn2.microsoft.com/ja-jp/library/bb429619.aspx
そんなサイトを作る予定は全くないんですが、一応ブックマークしておきます。
MSDN Magazine 2007年11月号の記事。
http://msdn.microsoft.com/msdnmag/issues/07/11/CLRInsideOut/default.aspx?loc=jp
ライフタイム管理って苦手です(笑)
他にも苦手なことは多いけど、これもやっぱり苦手。
弱参照って言われてもよく分かってないし・・・。
勉強のために読んでみます。
分離ストレージ=ユーザーごと、アセンブリごとの固有のデータ保存領域 です。
仕事に関連してちょっと実験したので、自分のための覚え書き。
自分(アプリ)専用のデータキャッシュなんかにどうぞ。
自分のための覚え書き。
Vista で MSDTC が上手いこと動いてくれない(RPC が拗ねてイベントログにエラーを吐く)現象が発生しました。
いろいろ調べてもなかなかわからなくてやっとたどり着いた情報がこれ。
MSDTC -install fails to reinstall Distributed Transaction Coordinator (Windows Vista)
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1456054&SiteID=1
Vista での MSDTC -install の挙動が変わった(バグか?)のが原因みたいです。
実はまだ自分の手元では確認していないけど、これで直るといいんだけどなあ。
※追記(12/17)
違う、違う。
Vista で ネットワーク DTC が上手く動かないと思ったら、RPC のポートの問題でした。
XPではRPC用にポート3つほど空けておけばいいのに、Vistaではそれでは足りない様子(10個空けたら動いた)。ファイアウォールなしの環境だと苦労せずに動くので不思議だなと思ってたんですが、気づかなかったお前が不思議だ>自分
ちなみにイベントビューアにエラーが出ているのでちゃんと読んでれば悩まずにすみました。
詳しくは改めて整理して投稿します。