質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

319閲覧

WEBFormにてデバイスコンテキストを取得したい。

help_

総合スコア20

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/03/23 08:23

現在業務にて作成しているWEB Formアプリにて
既存の社内作成DLLへと画像書き出し処理を依頼する際に
HDC、デバイスコンテキストを渡す必要があります。

VB6 CGIアプリケーションからVB.netへの変換作業で
VB6での実装はダミーのFormから下記のように取得しています。

VB6

1frmDummy.HDC

aspxを利用するVB.netにて同様のものを取得する為にはどのような実装を行えばよいでしょうか。
ご教授いただけますでしょうか。

環境は
.netFreamWork4.7
VS2013 Express
Windows8.1
です。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、ご質問「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/25 15:20

編集2018/03/25 15:23
dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

help_

2018/03/27 06:13

丁寧な回答、ありがとうございました。 ただ社内ライブラリのHDCに0を渡してテストしたところ問題なく稼働しました。 現状では引き渡すが使っていない可能性があるようです。 個のライブラリを使う上で今後また必要になるかもしれないので、 その時には参考にさせていただきたいと思います。 本当にありがとうございました。
dodox86

2018/03/27 06:48

コメントでの結果のご報告、どうもありがとうございます。「使い方によっては使えるかも。。。」とは思っていましたが、そもそもHDC=0で問題なく使えて良かったです。色々書いてかえって混乱させてしまっていたかもしれませんので、その点はすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問