2008年5月31日
C#からのダイアルアップでハマる
WindowsのRAS(Remove Access Service)機能を使って、C#からダイアルアップするという単純なことではまった
厳密に言うとWindows CE上の.NET Compact Frameworkで…Compact FrameworkでないRASの使用例は検索すれば簡単に見つかります。
まぁ、C#だし.NET上で動くんだし…と軽い気持ちで、CompactじゃないサンプルプログラムをCompactで使おうとするとヒドイ目に遭うようです
正確に言うと、それでもRasDialで接続くらいならできてしまうのがスゴイところ(正直、逆に厄介だ)なんだけど…他のRas*系のWinAPI(例えばRasGetEntryDialParamsとか)が引数不正だとか言って怒りはじめる
RasDialとRasHungUpさえ動けば何とかできないことはないが…ムカムカするので、さらに検索すると以下のページがヒットしました
もうタイトルからして、そのものズバリですね~でも、このコードを使うにはOpenNETCFがオープンソースで提供してくれているOpenNETCF Smart Device Framework v1.4が必要になるようです。ライセンスもMITライセンスと独自ライセンスで非常に緩いライセンスなので文句なし
なんですが、ここでも客先の障壁が…
でも、あきらめキレないのでSmart Device Framework(SDF)の中から必要となるAdvancedMarshalerのソースだけをチョット拝借して…さらに、(compact framework) RasDial example – Visual C#のページのコメントにあるWriteStringメソッドの修正(ちなみに電球アイコンの部分は[i]です
)を行って実行すると…
さすが、Compact Framework向けと書いているだけありますね。まぁ、客先とのコードの扱いとかもあるのでどうするかは決定していないのですが動いたので満足です
まぁ、非常に荒っぽくイメージで説明すると以下の図ような感じで動作してるのかな

通常のMarshalで何とかガンバッテ欲しいんですけど…Compact Frameworkの場合はナゼかうまく行かないので、もうメモリイメージで強引にWinAPIに渡して、返ってきたものをメモリイメージからC#な世界へと橋渡ししてくれるのが…AdvancedMarshalerさまの働きのようです。
TrackBack URL :
