まず、ご質問「WEBFormにてデバイスコンテキストを取得したい」への回答ですが。WebFormではデバイスコンテキストは取得できません。
WebFormはブラウザー上においてhtmlで画面を構成するためのもので、PC上に画面として表示されているデスクトップやWindowsプログラムのフォームのデバイスコンテキストとは結びついていません。本質的に画面を構成する方法が異なります。
では代案はあるのか、と言えば、一応あります。ですが質問者さんの最終的な要件としてはこれも使えない可能性があります。(後述します)
VB6で作られたおおもとのCGIプログラムは、ひとつのWindowsアプリケーションであったと思います。
IISから起動させるのだと思いますが、それはいったん置いておいて、単にVB6のフォームのForm.hDC
をVB.NET用に変換するのであれば、下記の記事の内容が参考になります。引用させていただきます。
VB6のhDCプロパティはVB.NET(VB2005)ではどうなる?
それを踏まえ、次に、質問者さんが作られたプログラムは最終的に最近のWindowsのIISで稼動するWEBアプリケーションだと推察します。そうであれば上記は希望通りの動きをしない可能性があります。IISのワーカープロセス内で質問者さんのプログラムが動作するとき、そのプログラムが動作している空間(セッション0)では有効なデバイスコンテキストを取れる描画可能な画面が存在しないからです。
理由は、別の質問でSuferOnWwwさんが回答されている内容で重なります。
ASP.NET IIS側でexeを実行するプログラムを配置しても動作しない
IISのワーカープロセス(ひいてはASP.NET、CGI)が動作する空間にはデスクトップ画面が存在しません。
もし、もとのVB6のCGIプログラムを今の開発環境で動作させてフォームのデバイスコンテキストが取れ、全体として希望通りに動いているのであれば、それはデスクトップ画面が存在するデバッグ環境で動作させているからだと考えられます。
VB6のCGIプログラムを動作させていた頃のWindows環境は、Windows XPやその時代のWindows Serverだったのではないでしょうか。その頃はセッション分離と言うものはなかったので、動作していてもおかしくはありません。Windows Vista, Windows Server2008からその動作形態がNGとなります。
質問者さんの環境とは違うとは思いますが、私が試した環境(Windows 7 + IIS7.5)で、ウィンドウを持つアプリケーションをCGIとし、画面(.NET Frameworkアプリのフォーム相当)のデバイスコンテキストを取得~ビットマップファイルとして保存して確認したところ、真っ黒になってしまいました。
質問者さんのプログラム、および「社内作成DLL」がフォームのデバイスコンテキストを介してどのような処理をするかは分かりませんが、ウィンドウ(フォーム)自体は作れて動作する為、動作環境やプログラムによっては希望通りの動作をするかもしれないし、しなくても仕方無い(Windowsの仕様)と言うことになります。
上記を踏まえ、注意して開発作業を進められることをお勧めします。
重ねてになりますが、ASP.NET IIS側でexeを実行するプログラムを配置しても動作しない
のSuferOnWwwさんの回答をご覧になってみてください。私も別で回答させてもらっています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/27 06:13
2018/03/27 06:48