C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: createobjectの代わりとなるもの


(過去ログ 144 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■84463 / inTopicNo.1)  createobjectの代わりとなるもの
  
□投稿者/ makoto (1回)-(2017/07/06(Thu) 14:34:58)

分類:[JavaScript] 

makotoと申します。

ASP内にあるVBScriptの記述をJavaScriptに置き換えようとしているのですが、
その中でサーバ上にあるDLLを実行するためにCreteObjectを使用している
箇所があります。これをJavaScriptに置き換えようとしているのですが
CreateObjectの代わりとなるような関数はJavaScriptに無いでしょうか?

ActiveXObjectが使えそうなのですが、これはサーバ上のDLLは実行できないのでしょうか?

引用返信 編集キー/
■84468 / inTopicNo.2)  Re[1]: createobjectの代わりとなるもの
□投稿者/ 魔界の仮面弁士 (1336回)-(2017/07/06(Thu) 15:57:51)
2017/07/06(Thu) 16:18:09 編集(投稿者)

No84463 (makoto さん) に返信
> ASP内にあるVBScriptの記述をJavaScriptに置き換えようとしているのですが、

クライアントサイドの話ではなく、
サーバーサイドの話なのですね?

だとしたら、正確には JavaScript ではなく JScript です。
まぁ、当の Microsoft 側でさえ区別されていない事も多いのですが。


ところで、何のために置き換えが必要なのでしょうか。
幾つかの COM 機能は JScript からだと呼び出せないものもあるので、
個人的には VBScript のままの方が良いと思います。

たとえば、TypeName 関数や VarType 関数が無いので型判定に困るとか、
Let と Set を区別するタイプのプロパティを直接操作できないとか、
Nothing と Empty を区別できないなど。


また、配列の扱いも苦手です。
VBScript では、Variant な配列(SAFEARRAY)を直接読み書きできますが、
JScript では VBArray オブジェクトを経由しないと読み出せない仕様です。

また、Variant 配列への書き込みも直接的にはサポートされていません。
Scripting.Dictionary 等を経由すれば一応生成できますが…。


> CreteObjectを使用している箇所があります。

JScript からの COM/ActiveX の利用がある場合、使用後に
CollectGarbage メソッドを呼び出さないと、オブジェクト解放が
遅れることがあるようです。VBS は Nothing 代入だけで OK なのですが。

ただ、サーバーサイドでの利用時にも言える事なのかは、
経験が無いので分かりません(未調査です)。


> CreateObjectの代わりとなるような関数はJavaScriptに無いでしょうか?
> ActiveXObjectが使えそうなのですが、これはサーバ上のDLLは実行できないのでしょうか?

CreateObject 関数に相当する物は確かに ActiveXObject オブジェクトですが、
そもそも VBScript であっても、サーバーサイドで CreateObject 関数を使ってはいけません。

代わりに Server.CreateObject メソッドを使う必要があります。JScript の場合も同様です。

https://support.microsoft.com/ja-jp/help/414599
https://support.microsoft.com/ja-jp/help/289531/
引用返信 編集キー/
■84469 / inTopicNo.3)  Re[2]: createobjectの代わりとなるもの
□投稿者/ makoto (4回)-(2017/07/06(Thu) 16:15:12)
魔界の仮面弁士様

回答ありがとうございました。

> また、何のために置き換えが必要なのでしょうか?
ClassicASPの改修を行っているのですが、JavaScriptとVBScriptが
混在している状態となっています。JavaScriptとVBScriptを混在させると
VBScriptが動かなくなるため(IE11) 今回の改修でVBScriptの部分を
JavaScriptに置き換えようとしています。

> そもそも VBScript であっても、サーバーサイドで CreateObject 関数を使ってはいけません。
> 代わりに Server.CreateObject メソッドを使う必要があります。JScript の場合も同様です。
現行のプログラムはServer.CreateObjectを使用していました。

No84468 (魔界の仮面弁士 さん) に返信
> ■No84463 (makoto さん) に返信
>>ASP内にあるVBScriptの記述をJavaScriptに置き換えようとしているのですが、
> クライアントサイドの話ではなく、
> サーバーサイドの話なのですね?
>
> だとしたら、正確には JavaScript ではなく JScript です。
>
>
> また、何のために置き換えが必要なのでしょうか?
> 幾つかの COM 機能は JScript からだと呼び出せないものもあるので、
> 個人的には VBScript のままの方が良いと思うのですけれども。
>
>
>
>>CreteObjectを使用している箇所があります。
>
> ActiveX の利用がある場合、CollectGarbage メソッドを呼び出さないと
> オブジェクト解放が遅れることがありますのでご注意ください。
>
>
>>CreateObjectの代わりとなるような関数はJavaScriptに無いでしょうか?
>>ActiveXObjectが使えそうなのですが、これはサーバ上のDLLは実行できないのでしょうか?
>
> CreateObject 関数に相当する物は確かに ActiveXObject オブジェクトですが、
> そもそも VBScript であっても、サーバーサイドで CreateObject 関数を使ってはいけません。
>
> 代わりに Server.CreateObject メソッドを使う必要があります。JScript の場合も同様です。
引用返信 編集キー/
■84470 / inTopicNo.4)  Re[3]: createobjectの代わりとなるもの
□投稿者/ 魔界の仮面弁士 (1337回)-(2017/07/06(Thu) 16:21:18)
No84469 (makoto さん) に返信
> 回答ありがとうございました。

No84468 の回答を幾つか書き直しています。事後修正で済みません。


> JavaScriptとVBScriptを混在させると
> VBScriptが動かなくなるため(IE11)

それはクライアントサイドの話ですよね。
サーバーサイドは IE のバージョンとは無関係です。
引用返信 編集キー/
■84476 / inTopicNo.5)  Re[4]: createobjectの代わりとなるもの
□投稿者/ makoto (6回)-(2017/07/06(Thu) 17:22:27)
魔界の仮面弁士様

詳細な回答ありがとうございます。

改修の方法ですが、以下のように改修しようと思います。
JScriptのActiveXObject関数ですが、これはサーバを指定することは
できるのでしょうか?
↓のURLを見る限り指定はできそうなのですが
https://msdn.microsoft.com/ja-jp/library/7sw4ddf8(v=vs.94).aspx


----------------------
----- 既存のASP ------
----------------------
<% @Language="VBScript" %>
<%

Sub Main()
Server.CreateObject("サーバ上のDLL")
End Sub

%>

<SCRIPT LANGUAGE="JavaScript">
<!--

function test1()
{
}

function test2()
{
}

//-->
</SCRIPT>

<BODY onLoad="func1()" onKeyDown="func2()" >
</BODY>


----------------------
----- 改修後のASP ----
----------------------
<SCRIPT LANGUAGE="JavaScript">
<!--

function Main()
{
var fso = new ActiveXObject("サーバ上のDLL");

}

function test1()
{
}

function test2()
{
}

//-->
</SCRIPT>

<BODY onLoad="func1(); Main();" onKeyDown="func2()" >
</BODY>




引用返信 編集キー/
■84477 / inTopicNo.6)  Re[5]: createobjectの代わりとなるもの
□投稿者/ 魔界の仮面弁士 (1339回)-(2017/07/06(Thu) 19:27:58)
2017/07/06(Thu) 19:52:11 編集(投稿者)

No84476 (makoto さん) に返信
> JScriptのActiveXObject関数ですが、これはサーバを指定することは
> できるのでしょうか?

そもそも勘違いがあるように思います。

VBScript の CreateObject と、ASP の Server.CreateObject は別物です。

そして JScript の ActiveXObject は、VBScript の CreateObject に相当するものですが、
今回使うべきはそのどちらでもなく、ASP の Server.CreateObject メソッドです。

Server.CreateObject のリファレンスはこちら。
https://msdn.microsoft.com/ja-jp/library/cc338773.aspx


そして、サーバーサイドの JScript を指定するための書式は
> <SCRIPT LANGUAGE="JavaScript">
ではありません。
これではクライアントサイドのスクリプトになってしまいます。

サーバーサイドで JavaScript(JScript) を使う場合には、

<% @Language="JScript" %>
<%
function Main()
{
var fso = Server.CreateObject(progId);
}
%>

もしくは

<script language="JScript" runat="Server">
function Main()
{
var fso = Server.CreateObject(progId);
}
</script>

のようにします。


しかし先にも述べましたように、今回の要件では
サーバーサイドスクリプトは VBScript のままで問題ない筈です。
クライアントサイドの VBScript は、JavaScript への書き換えが必要ですが。


> ↓のURLを見る限り指定はできそうなのですが
> https://msdn.microsoft.com/ja-jp/library/7sw4ddf8(v=vs.94).aspx

今回のケースでは、ActiveXObject オブジェクトを使わないので関係は無いですが、
上記の URL は、Internet Explorer 向けのリファレンスですよ。

ASP/WSH/WSC/WSF 向けの JScript リファレンスはこちら。
https://msdn.microsoft.com/ja-jp/library/cc427718.aspx
引用返信 編集キー/
■84478 / inTopicNo.7)  Re[6]: createobjectの代わりとなるもの
□投稿者/ makoto (7回)-(2017/07/06(Thu) 19:52:49)
魔界の仮面弁士様
ありがとうございます。

ご指摘通りかなりの勘違いをしていたようです。
本日は時間がないので、明日に再度
ご報告いたします。

この度は誠にありがとうございました。

> ■No84476 (makoto さん) に返信
>>JScriptのActiveXObject関数ですが、これはサーバを指定することは
>>できるのでしょうか?
> そもそも勘違いがあるように思います。

引用返信 編集キー/
■84483 / inTopicNo.8)  Re[7]: createobjectの代わりとなるもの
□投稿者/ makoto (8回)-(2017/07/07(Fri) 10:53:50)
魔界の仮面弁士様

当方が根本的な勘違いをしていました。
前の投稿で「 JavaScriptとVBScriptを混在させると VBScriptが動かなくなるため(IE11) 」
と書きましたが、クライアント側もサーバ側も動作しなくなると思い
今回、JavaScriptに置き換えようとしていました。
サーバ側は関係ないのですね。

今回、改修しようとしているASPの中にクライアント側のVBScriptの部分はあるので
そこはJavaScriptに置き換えようと思います。

色々とありがとうございました。

引用返信 編集キー/
■84484 / inTopicNo.9)  Re[8]: createobjectの代わりとなるもの
□投稿者/ PANG2 (182回)-(2017/07/07(Fri) 11:10:15)
2017/07/07(Fri) 11:11:18 編集(投稿者)

もう一つ勘違いしている気がします。

> 前の投稿で「 JavaScriptとVBScriptを混在させると VBScriptが動かなくなるため(IE11) 」

IE11標準モード対応ですね。
ようは、Microsoft 独自の技術は使うなということなので、
ActiveX系技術をJavascriptに置き換えても意味がありません。

引用返信 編集キー/
■84485 / inTopicNo.10)  Re[9]: createobjectの代わりとなるもの
□投稿者/ makoto (10回)-(2017/07/07(Fri) 11:37:13)
PANG2様

返信ありがとうございます。
>IE11標準モード対応ですね。
今回の対応はそうなのですが、頭が混乱しています。

例えば下記のようなコードがあった場合、IE11では動かないので
VBScriptの部分をJavaScriptに置き換えようとしています。

かなり根本的な質問で申し訳ないのですが、
そもそも「IE11標準モード対応」は具体的になにをすれば良いのでしょうか?

<html>
<body >
<script type="text/javascript">
alert ('JSのテスト');
</script>

<script type="text/vbscript">
msgbox "VBSのテスト"
</script>
</body>
</html>

引用返信 編集キー/
■84487 / inTopicNo.11)  Re[10]: createobjectの代わりとなるもの
□投稿者/ PANG2 (183回)-(2017/07/07(Fri) 13:02:52)
表題に対する答え

クライアント側のVBScriptにCreateObject が記述されているのであれば、
JScriptの ActiveXObject に移植しても動かない(のではないか?)ということです。
引用返信 編集キー/
■84489 / inTopicNo.12)  Re[11]: createobjectの代わりとなるもの
□投稿者/ makoto (12回)-(2017/07/07(Fri) 14:12:34)
PANG2様

回答ありがとうございます。
一旦整理してプログラムの改修を行おうと思います。

皆さん、回答誠にありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -