サーバ上でActiveXコントロールのオブジェクトを生成し、VBScr
サーバ上でActiveXコントロールのオブジェクトを生成し、VBScriptからメソッド呼
び出しを行うため、下記のようなプログラムを作成しました。
[test.asp]
<html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type" content="text/html; charset=x-sjis"/> <meta name="GENERATOR" content="Microsoft Visual Studio 6.0"/> </head>
<body>
<OBJECT id=Test1 style="LEFT: 0px; VISIBILITY: hidden; TOP: 0px"
codeBase=Test.ocx#version=4,0,0,0 type=application/x-oleobject classid=clsid:XXXX runat="server"> </OBJECT>
<script language=vbscript runat="server">
Response.Write(Request.Form(input1))
Test1.TestCall(Request.Form(input1))
</script>
<script language=vbscript>
Sub test1()
Document.Testform.submit()
End Sub
</script>
<form name="Testform" action="test.asp"method="POST"> <input style="width: 143px; height: 75px" type="button" name="button1"
onclick="test1"/>
<input type="hidden" name="input1" value=" "/> <!--ここにユーザ入力値を入れ
る-->
</form>
</body>
</html>
Test.ocxは公開メソッドとして、ユーザ入力値を引数に持つ"TestCall"を持っていま
す。
サーバ側でregsvr32 Test.ocxでレジストリ登録して、そのクラスIDを<OBJECT>タグ
で指定しています。
これをクライアントから
http://servername/test.asp
で開くと、そのまま応答がなくなります。
VBScriptでTest.ocxのメソッドを使用している部分を削除すれば、普通にレスポンス
が帰ってきます。
(Response.Write(Request.Form(input1))の結果が正しく表示されている)
input1にはユーザ入力値を入れる処理をVBScriptで実装していますが、上記では省略
しています。
何か設定等足りないところがあるのでしょうか?
Test.ocxのインスタンス生成に失敗しているような感じがします。
インスタンスはこのページがロードされたときにサーバ側で生成されるものと理解し
ていますが、正しいでしょうか?
なお、これと同じことをクライアントサイドで行った場合、正常にTest.ocxのメソッ
ドをコールできています。
(<object>タグと<script>タグでrunat="server"を削除。)
やりたいことは、ユーザーが入力したフォームデータをsubmit()して、サーバ上で
ActiveXオブジェクトを生成して、VBScriptからActiveXの公開メソッドを呼び出し、
その中からさらにサーバ上の別プログラムを呼び出し、処理結果を受けてVBScriptへ
処理を戻し、結果をASPで処理してクライアントに返したいのです。
普通のWebアプリケーションとほぼ同じだと思いますが、ActiveXコントロールから別
のプログラム(レガシーアプリ)へはPostMessageで要求を投げているので、結果が
自身にPostされるまでSleepしてからVBScriptに処理を戻すという形にしようとして
います。
サーバ環境はWindows Server 2003 + IIS6.0、クライアントはWindows XP Professional SP3 + IE6.0です。
リモートデバッグの仕方が分からず苦労しています。
お礼
ありがとうございます。!! たすかりました。