- PR -

IEで管理されるアプリケーションについて

投稿者投稿内容
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-04-05 23:01
こんにちは。

ためしにWindowsFormのEXEを作成して、EXEがあるフォルダをWeb共有名「IEHOST」で設定し
EXEがあるフォルダ上にtop.htmを配置しました。Top.htmの中身は次の通り。
<html><body>
<OBJECT ID="obj" CLASSID="windowsforms.exe" HEIGHT="300" WIDTH="300"></OBJECT>
</body></html>
ブラウザからはURLに「http://localhost/IEHOST/top.htm」を実行しました。
画面上には指定したサイズ枠が表示された状態でずーっとブラウザの下のプログレスバーが
先に進みません。
もしかしてEXEはIEにホストできないのでしょうか?
過去ログを見るとみんなDLLだったんですが、どうなんでしょうか?
ちなみに
ブラウザからはURLに「http://localhost/IEHOST/windowsforms.exe」は実行できました。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-07 10:41
こんにちは。
引用:

b-maxさんの書き込み (2003-04-05 23:01) より:

もしかしてEXEはIEにホストできないのでしょうか?
過去ログを見るとみんなDLLだったんですが、どうなんでしょうか?


 オブジェクトの指定が完全ではないからだと思います。そこに表示するオブジェクト(クラス)を指定してやると、どうなりますか?
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-04-07 13:42
jittaさん、こんにちは。

<html><body>
<OBJECT ID="obj" CLASSID="windowsforms.exe#DBViewer" HEIGHT="300" WIDTH="300"></OBJECT>
</body></html>
または
<html><body>
<OBJECT ID="obj" CLASSID="windowsforms.exe#DBViewer.Main" HEIGHT="300" WIDTH="300"></OBJECT>
</body></html>

どちらの指定もだめでした。
ブラウザ上でURLを指定して実行すると、ブラウザ上に表示領域が表示されるのですが、その領域の高さは1cmほどで横の長さは10cmぐらいです。
その他のブラウザ画面上は真っ白です。

「HEIGHT="300" WIDTH="300"」
に問題ありでしょうか?
「HEIGHT="100%" WIDTH="100%"」
にしても横の長さが広がるだけで、縦は変わらず、その他はやはり真っ白でした。

ちなみにDBViewer.exeとは自作アセンブリDLLを参照していて、SQLサーバーに接続して画面上にDB名、テーブル名、データを表示する簡易なWindowsFormアプリケーションです。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-07 13:59
こんにちは。

 残念ながら、まだ不完全だと思います。
<OBJECT ID="obj" CLASSID="windowsforms.exe#*DBViewer" HEIGHT="300" WIDTH="300">
「*」のところに、名前空間の指定が必要かと思います。名前空間については、ソース中に記載されていなくても、プロジェクトエクスプローラでプロジェクトファイルを右クリック→プロパティで表示されるプロパティーシートで、「ルート名前空間」というものが指定されています。ここから指定してみてください。また、デフォルト(引数なし)のコンストラクタも必要です。

 また、EXEですが、DLLとして動作します。このことの仕組みは、2つの実行可能プロジェクトのあるソリューションを作成し、一方が他方を『参照』して取り込み、確認してください。
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-04-07 14:16
jittaさん、こんにちは。

ルート名前空間は「DBViewer」でしたので以下のように修正し実行しました。
<OBJECT ID="obj" CLASSID="windowsforms.exe#DBViewer.DBViewer" HEIGHT="300" WIDTH="300">
結果は変わらずでした。
また、デフォルトコンストラクタは存在しております。ただデフォルトコンストラクタ内に処理を記述しております。もしかしてこれが原因でしょうか?
.NET Framework SDKみてもこのあたりは詳しく載っていないですね(涙)

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-07 17:39
こんにちは。

 過去ログを見直して気がついたのですが、

<OBJECT ID="obj" CLASSID="http:windowsforms.exe#DBViewer.DBViewer" HEIGHT="300" WIDTH="300">

では?
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-04-07 21:27
jittaさん、こんにちは。

試してみましたが、同じ現象で駄目でした。
んー何が足りないのだろうか・・・?
色々と試してみますが、またご助言いただければ幸いです。
b-max
常連さん
会議室デビュー日: 2003/02/05
投稿数: 26
投稿日時: 2003-04-08 00:43
こんにちは。

過去ログを見つけました。(なかなか検索で条件入れても引っかからないものですね !汗!)
「WebアプリケーションにWindows Formsのコントロールを表示する方法」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1833&forum=7&9
この中で以下のbiacさんによる発言を発見しました。
1.System.Windows.Forms.Controls を継承したクラスであること。 ただし、Form は除く。
2.引数無しのコンストラクタが定義されていること。
3.サイズは明示的に指定すること。 (コンストラクタまたは <object> タグ内)
4.呼び出せるのは、そのクラスで定義したメソッド/プロパティのみ。 (継承元にあるだけでは、呼び出せないみたい。)
5.通信できるのは、HTML のある URL だけ。 それも HTTP(S) だけ。
6.ローカルリソースにはアクセス不可。 ただし、コモンダイアログでユーザが引き渡したファイルストリームなどは別らしい。 印刷も、コモンダイアログを使えば可能らしい。

この中で1番の「ただしFormは除く」とありますが、WindowsコントロールのみIE上で表示できるが、WindowsFormは表示できないということなのでしょうか?
そうであれば私が今やろうとしてエラーになっているのは、ある意味正しいということに。
ちなみに
※ ごくごく簡単なサンプルを次に置いてあります。 f(^^;
http://nadia.kabe.to/test/WinFormControlOnHTML/MyTextBox.html
の通りにサンプルを作成してやってみたが、IEに表示されない。なんでだろう?
【HTML】
<html><body>aaa<br><div>
<OBJECT ID="RepMgr1" CLASSID="IeHostDll.DLL#IeHostDll" HEIGHT="40" WIDTH="200"></OBJECT>
</div></body></html>
【IeHostDll.cs】
using System;
namespace IeHostDll
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
public class IeHostDll:System.Windows.Forms.TextBox
{
public IeHostDll()
{
this.Multiline = true;
this.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
}
public string TextReverse
{
set
{
char[] str = value.ToCharArray();
Array.Reverse(str);
this.Text = new String(str);
}
}
}
}

ちなみにサンプルのまま新規クラスライブラリープロジェクトを作成してcsファイルに貼り付けても怒られましたので、参照の追加でSystem.Windows.Form.dllを追加しました。
ビルドはこれでOKでしたが、IEに表示されない。なぜだろう・・・?

スキルアップ/キャリアアップ(JOB@IT)