DLLにすると割り込み発生しない。
-
2012年2月10日 0:17
VB.NET2008、WindowsXP SP3です。
シリアルポートを使うプログラムを作っています。
Windowフォームの、次のプログラム
Imports System.IO.Ports
Public Class Form1
Dim sp As SerialPort
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
sp = New SerialPort("COM4", 9600, Parity.None, 8, 1)
sp.Handshake = Handshake.None
sp.Open()
AddHandler sp.DataReceived, AddressOf SerialPort1_DataReceived
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
MsgBox("What?")
If sp.IsOpen = False Then
Return
End If
Dim data As String
data = sp.ReadExisting()
If Len(data) = 0 Then Exit Sub
sp.WriteLine("len=" & Len(data))
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
sp.WriteLine("Hello" & vbCrLf)
End Sub
End Class
つまり
ボタン1を押すとポートを開いて受信割り込みを設定
ボタン2を押すと書き込み
受信割り込み発生時に"What?"と表示し、データを送り返す
です。問題なく動作します。
ところが、これを
http://vbdotnet.seesaa.net/article/156679595.html
を参考にしてDLLにすると、受信割り込みが発生しないようです。
"What?"と表示されません。他は問題ないです。
何故でしょうか?
PerMLgiPmOLEIzWmgkViWgiNADMzceeeUVCccBMBJHJlmkyKFWcUBUqUrszUVaGEUnxAgYAXnrtVVTruLeiRPQlaAuOUsBEelUKj
すべての返信
-
2012年2月10日 1:17
シリアルポートとは関係なく質問者さんの言う「DLLにする」が失敗していて、そもそも何もかもが動作していない可能性があります。
まず、どのようにDLLにしたのですか? どのようにDLLを呼び出しているのですか? 本当に呼び出せているかの確認はしましたか?
-
2012年2月10日 1:32
既に書いているHP
http://vbdotnet.seesaa.net/article/156679595.html
を見ると分かりますが、VBScriptまたはHTAから呼び出します。
有効なポートを得る(GetPortNames)、ポートを開く、送信するは問題ありません。
ただ、受信(DataReceived)がDLLにすると割り込みが発生しないという現象です。
-
2012年2月10日 13:53モデレータ
有効なポートを得る(GetPortNames)、ポートを開く、送信するは問題ありません。
ただ、受信(DataReceived)がDLLにすると割り込みが発生しないという現象です。そもそも、GetPortNames とは何ですか?
当初に掲載されたのは Windows Forms のイベントドリブンのコードです。あなたが「DLL にする」として書き換えたコードを見せていないのに、「割り込みが発生しない」と言われても、原因を特定することは不可能です。その「DLL にする」過程でミスしている可能性が否定できないので、どんな問題が起きているかがわかりません。
(Open/Close が Form1 と関係ないところで行われているのであれば、Form1 の "What?" がでないのは当然です。それともこの Form1 や "What?" は受信側の話なのでしょうか…)
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
- 編集済み AzuleanMVP, Moderator 2012年2月10日 13:55
-
2012年2月10日 20:47
コードは、最後に掲載します。隠す意図はありませんが、
>その「DLL にする」過程でミスしている可能性が否定できな
>いので、どんな問題が起きているかがわかりません。
と仰るとおりに私もDLLにする時に何らかの設定が必要かと思ったので、コードをアップする必要がないと判断しました。見て分かりますが、
http://vbdotnet.seesaa.net/article/156679595.html
と構成は殆ど同じです。なお、コンパイル過程も同じですが簡単に述べます。
●コンパイル前に
sn.exe -k lightbox.snk
●コンパイル
>vbc /target:library /keyfile:lightbox.snk util.vb
●登録
>RegAsm.exe util.dll /tlb:util.tlb /codebase
●登録解除
>RegAsm.exe util.dll /unregister
>(Open/Close が Form1 と関係ないところで行われているので
>あれば、Form1 の "What?" がでないのは当然です。それとも
>この Form1 や "What?" は受信側の話なのでしょうか…)
上の文章を私は解釈できません。
私の文章が理解を苦しめているのかもしれませんが、時系列で述べると
http://vbdotnet.seesaa.net/article/156679595.htmlのコードを元に自作コードを作成した
しかし受信割り込みが発生しなかった
そこで,動作確認をするために別個にIDEを使ってフォームのプログラム上にて検証した(当然だが、DLLプログラムとフォームプログラムのコードは同一ではなく、割り込み部分と周辺部のみを記述した)。
その結果、フォームでは割り込みは発生した
何故DLLでは発生しないのか?
質問
です。
あなたは
http://vbdotnet.seesaa.net/article/156679595.html
を見ましたか?。これに掲載されているDLLはフォームを使っていません。
>そもそも、GetPortNames とは何ですか?
私の環境で、Googleで検索すると該当する内容が表示されました。それです。また、IDEのF1でも問題なく表示されます。
先入観なく伺いますが、“そもそも、GetPortNames とは何ですか”と私に質問する意図は何ですか?答える示してくれるであろう方からとは発せされる疑問とは思えません。
割り込み云々の前に、その意図を教えてください。
コードは以下です。名前は<util.vb>です。
ここから始まる--------------------------
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices ' DllImport
Imports System.IO.Ports
Imports System.Windows.Forms
' http://vbdotnet.seesaa.net/article/156679595.html
Namespace mytools
<Guid("D2516B86-42BC-4833-9FAC-AF75C44DF4F7"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface ImytoolEvents
' <DispId(1)> _
' Sub EndDownload()
' <DispId(2)> _
Sub EndDownload2( str As String )
End Interface
' VB.net のイベントを COM へ公開する
<ComSourceInterfaces(GetType(ImytoolEvents))> _
Public Class util
Dim sp As SerialPort
Public Sub New ()
MsgBox( "New" )
End Sub
Protected Overrides Sub Finalize()
MsgBox( "Bye" )
End Sub
' ' Win32 API を使う為の定義
' <DllImport("urlmon.dll", CharSet:=CharSet.Unicode)> _
' Private Shared Function URLDownloadToFile( _
' ByVal pCaller As Integer, _
' ByVal szURL As String, _
' ByVal szFileName As String, _
' ByVal dwReserved As Integer, _
' ByVal lpfnCB As Integer _
' ) As Integer
' End Function
' ******************************************************
' COM へ公開するメソッド
' ******************************************************
' Public Function funcA(target As String) As String
'' ' ***********************
'' ' イベントを発生させる
'' ' ***********************
'' RaiseEvent EndDownload()
'' RaiseEvent EndDownload2( target )
' return "fine"
' End Function
Public Sub AudioPlay(s as string)
My.Computer.Audio.Play(s, AudioPlayMode.WaitToComplete)
end sub
Public Sub BeepN(n as integer)
dim i as Long
for i = 1 to n
Beep()
next
end sub
Public Sub ClipboardSetText(s as string)
Clipboard.SetText(s, TextDataFormat.UnicodeText)
end sub
Public Function ClipboardGetText() as String
return Clipboard.GetText
end Function
Public Sub SerialPortOpen(p as String)
sp = New SerialPort(p, 9600, Parity.None, 8, 1)
sp.Handshake = Handshake.None
sp.Open()
AddHandler sp.DataReceived, AddressOf SerialPort1_DataReceived
end Sub
Public Sub SerialPortClose()
sp.Close()
end Sub
Public Sub SerialPortWrite(s As String)
Dim dat As Byte() = _
System.Text.Encoding.GetEncoding("utf-8").GetBytes(s)
sp.Write(dat, 0, dat.GetLength(0))
sp.Close()
end Sub
Public Sub SerialPortWriteLn(s As String)
SerialPortWrite(s & vbCrLf)
end Sub
Public Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
MsgBox( "What?" )
If sp.IsOpen = False Then
Return
End If
Dim data As String
data = sp.ReadExisting()
If Len(data) = 0 Then Exit Sub
sp.WriteLine("len=" & Len(data))
RaiseEvent EndDownload2( data )
End Sub
Public Function SerialPortGetPortNames() As String
Dim ss() As String = SerialPort.GetPortNames()
if lbound(ss) > ubound(ss) then
return ""
end if
dim ret as string
ret = ss(0)
dim i as long
for i=1 to ubound(ss)
ret = ret & " " & ss(i)
next
return ret
End Function
' ******************************************************
' COM へ公開するイベント
' ******************************************************
' Public Event EndDownload()
Public Event EndDownload2( URL As String )
End Class
End Namespace
ここまで--------------------------------
-
2012年2月11日 7:50モデレータ
あなたは
http://vbdotnet.seesaa.net/article/156679595.html
を見ましたか?。これに掲載されているDLLはフォームを使っていません。もちろん見ています。
この構成を参考に、あなたがどのようなコードを書いたのかが想像できませんでしたから、どんなコードなのですかと問いました。Web サイトを参考にすれば、何でも動くわけではありません。
また、どのようなメソッドを COM として公開しているかわからないし、掲載されているのは "Form1" なので、もしかして、Form1 を使っているのか?とか想像したというものです。問題が起きるコードを最初から提示してもらえれば、お互いの誤解(ロス)が少なくなると思います。
先入観なく伺いますが、“そもそも、GetPortNames とは何ですか”と私に質問する意図は何ですか?答える示してくれるであろう方からとは発せされる疑問とは思えません。
割り込み云々の前に、その意図を教えてください。あなたが作った関数なのか、クラスライブラリの関数なのか、突如として現れている文面だったので推察しづらいため、あえて質問しています。
結果として、「あなたが同名の関数を作ってラップしていて、あなたが作った COM の関数は呼び出されている」と解釈しますが、相違ないですか?Public Sub SerialPortOpen(p as String)
sp = New SerialPort(p, 9600, Parity.None, 8, 1)
sp.Handshake = Handshake.None
sp.Open()
AddHandler sp.DataReceived, AddressOf SerialPort1_DataReceived
end Subコードを見比べた上での確認ですが、VBScript や HTA では Open してから待つようなコードを入れていますか?
元のサンプルでは、URLDownloadToFile が「ダウンロードが終わるまで待つ関数」なので、特に何もケアせずとも、受信が終わる前に VBScript が終了することはありません。
今回のコードでは SerialPortOpen を実行してもすぐにメソッドが終了して、VBScript に戻ってくるので、受信の間、何らかの待ちコードを入れる必要があります。それはきちんと入っていると解釈して問題ないですか?わかりづらければ、VBScript / HTA といった利用側の最小限のコードも提示してください。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
-
2012年2月11日 13:16あなたの発言内容を読みました。
内容の一部分だけに固執して無為に時間を費やすい意思はありません。あなたが今回の私に対して生じさせたのと同様な誤解を、他の質問者から受けないように指摘しますが、"GetPortNames"という名前が出たとき、
自分の知識に無い
→作った関数なのかクラスライブラリの関数なのか自分は判別できない
→そうであるから質問者に
“そもそも、GetPortNames とは何か?”
と質問する
という過程に成ったという文言は、私は50歳台のジジイですが、受容できないし私以外の年配者も同様かと思われます。不愉快です。知らないのなら調べればよいし、あなたが私の質問に答える環境にある--つまりVisualStudioのVBを利用できる環境にある--のなら"GetPortNames"をコピー・ペーストしてF1キーを押せば良いだけだと考えます。
これ以上は書きません。あなたも不愉快なら私に返答を下さらなくて結構です。
---
>コードを見比べた上での確認ですが、VBScript や HTA では Open してから待つようなコードを入れていますか?
幾つかのサンプルを見ましたが、SerialPortOpen()を実行後に何かを待つというコードを見てません。SerialPortOpen()を呼ぶと利用可能状態になるまで帰ってこない、またはエラーになると私は理解しています。実際にフォームでのプログラムでも考慮していませんが、問題ありません。
>今回のコードでは SerialPortOpen を実行してもすぐにメソッ
>ドが終了して、VBScript に戻ってくるので、受信の間、何らか
>の待ちコードを入れる必要があります。
理解できません。
その“待ちコード”というのは、他の処理という意味ですか?割り込みだから、割り込みを設定して以降は別の処理をしますよね。受信を待ちたいのなら割り込みなどせずにポーリングすれば良いだけです。
呼び出し側のコードは以下です。
---
Set obj = Wscript.CreateObject("mytools.util", "my_")
obj.SerialPortOpen "COM4"
obj.SerialPortWriteLn Now
WScript.Sleep 1000*10
'obj.SerialPortClose
Sub my_EndDownload2( str )
MsgBox "終了イベント:" & str
End Sub
---
Sleepしている間に、ターミナルのキーを押しましたがmy_EndDownload2は呼び出されないのは勿論、MsgBox( "What?" )も実行されません。
-
2012年2月11日 13:54モデレータ
問題の本質が見えづらく、いろいろな可能性が考えられたので、論理的に否定されていなかったことを、「念のため確認しようとした」のですが、いろいろとこじれてしまいましたね、すみません。
引っ張るのは建設的ではありませんし、必要最小限の指摘・確認にとどめることにします。さて、本題ですが、利用側のコードとつきあわせて DLL 側のコードを改めて見直したところ、問題がようやく見えました。SerialPortWriteLn → SerialPortWrite で sp.Close を実行している ので、書き込んだ後に受け取ることはできないのではないかと考えられます。
少なくとも、Sleep している段階では SerialPort が閉じています。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
- 編集済み AzuleanMVP, Moderator 2012年2月11日 14:13
- 回答の候補に設定 山本春海Moderator 2012年2月14日 8:37
- 回答としてマーク 山本春海Moderator 2012年2月21日 5:13
-
2012年2月11日 15:36私の真意が分かってもらえて嬉しいです。
ある同様な趣旨を持つ質問の場で、あるフリーソフトに不具合があるので対策を教えて欲しい旨の質問をしました。そこにて軽薄な文調で浅い知識を披瀝し可能性のある問題点だけを陳述するだけの、平たく言えば質問者を見下しケチをつけるだけ、愚か者が何人もいました。
軌道を修正するために、角を立てない口調で、別のフリーソフトを紹介して欲しいと依頼すると「私に探せといっているのか」と答えられました。最後にはそんなものは無いと明言してきました。実際には、その後ネット上で自ら検索し、問題の出ていたソフトと同じくらい有名な別のフリーソフトを使用した結果、エラーは出ませんでした。
無視する方向もあったのですが、この老木でも声を出せねば馬鹿者共を跋扈させ続けさせるだけとの考えに至り、指摘した次第です。
謝罪があったということは、貴方はそのような下劣な品性を持った人物では*無い*ということです。救われる思いです。
さて、貴方のご指摘の通り、sp.Close()してしまっていたのが原因でした。実は以前はWrite()する度にOpen()してClose()するプログラムだった(ターミナルソフトを交互に利用する形で共有していたのでVBScript側のみで占有出来なかった)為に、現在の形に変更したときに"Close()"を削除し忘れていました。私の失態です。
ところで、貴方のご指摘を功を奏して"What"が表示されましたが、その後、
Microsoft (R) Console Based Script Hose
問題が発生したため、Microsoft (R) Console Based Script Hoseを終了します...
なる小さな窓が表示され、それを閉じるとコンソールに次が表示されました。
---
ハンドルされていない例外: System.NotImplementedException: メソッドまたは操作は実
装されていません。
場所 System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr
, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[
] namedParameters)
場所 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags,
Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifie
rs, CultureInfo culture, String[] namedParams)
場所 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingF
lags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
場所 mytools.ImytoolEvents.EndDownload2(String str)
場所 mytools.util.SerialPort1_DataReceived(Object sender, SerialDataReceivedE
ventArgs e)
場所 System.IO.Ports.SerialPort.CatchReceivedEvents(Object src, SerialDataRec
eivedEventArgs e)
場所 System.IO.Ports.SerialStream.EventLoopRunner.CallReceiveEvents(Object st
ate)
場所 System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object sta
te)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state)
場所 System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_Th
readPoolWaitCallback tpWaitCallBack)
場所 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object stat
e)
---
エラーメッセージの解釈は兎も角、util.vbを次の様にして、
---
Public Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
MsgBox( "What?" )
If sp.IsOpen = False Then
Return
End If
MsgBox( "1" )
Dim data As String
MsgBox( "2" )
data = sp.ReadExisting()
MsgBox( "3" )
If Len(data) = 0 Then Exit Sub
MsgBox( "4" )
sp.WriteLine("len=" & Len(data))
MsgBox( "5" )
RaiseEvent EndDownload2( data )
MsgBox( "6" )
End Sub
---
実験すると、"5"まで表示されました。当然ですが、"5"と"6"の間の、VBScript側の
Sub my_EndDownload2( str )
MsgBox "終了イベント:" & str
End Sub
は実行されません。
質問の内容が変わってしまいますが、"5"の後で当該エラーになるのは何故でしょうか。未だ私の失態がありますか?
- 編集済み 山本春海Moderator 2012年2月21日 5:08 不適切発言削除
-
2012年2月12日 9:40
ハンドルされていない例外: System.NotImplementedException: メソッドまたは操作は実 装されていません。
VB は範囲外ですが、イベント ハンドル メソッドを自動で生成したとき、中にはこの例外が発生するコードが仕組まれます。Not Implemented、実装されていない、です。皮は自動生成されますが、中身は自分で書かなければなりません。
Jitta@わんくま同盟
-
2012年2月12日 13:15
本題は話が進んでいるようなので…それとは別に気になっていることを。
COM化することとDLL化することは別です。COMはDLL以外にもEXE形式もあります。またDLLはCOM以外にも形式があります。
さて、COM化するサイトのURLを提示された上でDLL化できない、という記述を見たらどう感じますか? そもそもDLL化できていないと受け取るのが当然かと思います。それから質問する際は、意図通りに動作しない問題となっているコードを提示してください。意図通りに動作しているコードを提示した上で(提示されていない)コードが動作しないと書かれたら、その質問を読んだ人が「提示されたコードが動作しない」のだと誤解するのは当然です。
もっと謙虚に、質問を読む人の立場になって質問を書いてください。そこには年齢は関係ありません。
-
2012年2月13日 23:38>VB は範囲外ですが、イベント ハンドル メソッドを自動で生成
>したとき、中にはこの例外が発生するコードが仕組まれます。
>Not Implemented、実装されていない、です。皮は自動生成され
>ますが、中身は自分で書かなければなりません。
私の技量不足が原因で、具体策が見えません。中身を書くとは、どうするのですか? -
2012年2月14日 1:33
私もAzuleanさんと同じ疑問を抱いたので、思考過程を説明しておきます。
内容の一部分だけに固執して無為に時間を費やすい意思はありません。あなたが今回の私に対して生じさせたのと同様な誤解を、他の質問者から受けないように指摘しますが、"GetPortNames"という名前が出たとき、
自分の知識に無い
→作った関数なのかクラスライブラリの関数なのか自分は判別できない
→そうであるから質問者に
“そもそも、GetPortNames とは何か?”
と質問する
という過程に成ったという文言は、私は50歳台のジジイですが、受容できないし私以外の年配者も同様かと思われます。不愉快です。知らないのなら調べればよいし、あなたが私の質問に答える環境にある--つまりVisualStudioのVBを利用できる環境にある--のなら"GetPortNames"をコピー・ペーストしてF1キーを押せば良いだけだと考えます。"GetPortNames"という名前が出たとき、
- 質問文に含まれていない初出キーワード
- 調べた結果、GetPortNamesはクラスライブラリに含まれている
- クラスライブラリを呼び出せただけで、質問となっている自作したDLLを呼び出せたのかどうか判断つかない
- 「どのようにDLLにしたのですか? どのようにDLLを呼び出しているのですか? 本当に呼び出せているかの確認はしましたか?」に答えていないのでやはり本当にDLLを呼び出せたのか判断つかない
→「そもそも、(クラスライブラリではなく質問者さんの記述した)GetPortNames とは何ですか?」
となりました。質問者さんが不愉快になる必要はありません。
-
2012年2月14日 4:53モデレータ
こんにちは。
MSDN フォーラムをご利用のみなさん、いつもご利用ありがとうございます。オペレーターの山本です。
今後こちらのスレッドの質問が、他の方にも有効な情報となるといいなと思いますので、書き込みは質問内容の本質から離れずにできるだけ簡潔にしていただけるとうれしいです。
フォーラムのように文字ベースだけのやり取りとなる限られた環境では、相手の立場や条件を想像したり、くみ取ることが難しいことが多くあるかと思います。
誤解されるような、よくない心象を受けるような言葉づかいや、質問内容から離れたやりとりは特に控えてくださいね。今後部分的に書き込みを削除させていただく場合があります。
また、残念ながらスレッドのロックやアカウントを停止するといった措置をとらせていただく場合があります。
http://social.msdn.microsoft.com/Forums/ja-JP/help#197恐れ入りますが、何卒ご理解くださいますようお願いいたします。
__________________________
日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海 -
2012年2月15日 11:58
C# では、「sp.RecievedData +=」と入力すると、自動的にスケルトン コードを生成できるのですが、VB にはそういう機能はないのですね。
エラーメッセージの解釈は兎も角、
う~ん。。。何らかの間違いがあるからエラーになるわけで、エラーと判断した理由を示しているメッセージの解釈を「兎も角」とうっちゃると、解決なんてできないですよ。
COM がらみで出る NotImplementedException ということで、「com notimplementedexception」をキーに検索してみると、こんなモノが見つかりました。
NotImplementedException
COM IDispatch インターフェイスを使用した遅延バインディングによるアクセスはサポートされていません。ここから、MSDN ライブラリ内を「invoke notimplementedexception」をキーに検索しましたが、あちこちに、この記述があります。例外のスタック トレースを見ればわかるように、invoke 系のメソッドで発生しているので、これの可能性を疑います。と、言いたいところですが、_Type.InvokeMember メソッドには、そういった記述がないんですよねぇ。まぁ、これができないとなると、アン マネージからマネージ呼び出しが全部失敗するような気がする。それとも、メイン スレッド以外からの呼び出しに対応できないのだろうか?
ただ、_Type.InvokeMember の説明に書いてあることによると、アン マネージからの呼び出しには _Type が使われるようですが、スタック トレースを見ればわかるように、実際には RuntimeType が使われています。RuntimeType は、Type の実装の一つで、これは MSDN ライブラリに記述がありません。この先は、マイクロソフトの有償サポートを利用してください。MSDN ライブラリに記述がないので、ライセンスについている無償のインシデント サポートでは無理です。
メモ:Raising events from .NET UserControl inside a VB6 MDI form(Interop Forms Toolkit) の、Thursday, October 25, 2007 1:30 AM kevinさんの状況がとても近いような気がする。
Jitta@わんくま同盟
- 回答としてマーク 山本春海Moderator 2012年2月21日 5:14
-
2012年2月21日 5:13モデレータ
こんにちは、AkasakaUeno さん。
MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
技術的な内容とは関係のないやり取りが行われていましたので、質問内容に関係のないとされた投稿については削除されております。
フォーラムのような公の場では、意見や認識の食い違いから本題とは関係のないやり取りが発生してしまう事もありますが、色々な考えをお持ちの方が集まっており仕方ない部分もあると思います。
他の利用者の方にご配慮いただきながら、MSDN フォーラムをご利用いただければと思います。
なお、有効な情報を得られているようでしたので、勝手なが私のほうで回答としてマークさせていただきました。
情報を投稿くださったみなさん、ありがとうございました。
今後とも MSDN フォーラムをよろしくお願いいたします。
_____________________
日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

