< 分散トランザクションを開始できないエラー | テーブルを返すFUNCTION >

November 19, 2003

ASPからコールするCOMコンポーネント

VBでASPからコールするActiveX DLLやActiveX EXEを作成する場合のポイントらしきものです。

  1. データ型

    ASPで使用するスクリプト言語は型がありません。したがって

    • 引数はByValで
    • ByRefで渡す引数はVariantに
    と言う感じにします。
  2. プロジェクトのプロパティ
    • 「対話型インターフェースの抑制」にチェック
    • 「メモリに保持」にチェック
    • スレッドモデル
      • スコープがApplication---シングル スレッド
      • スコープがSession-------アパートメントスレッド
      で作成します。このあたり、VC++で作成すると「Both」が選択できた気がしますが、VBでそれに当たるのはないのかな?
  3. ASP組み込みオブジェクトへのアクセス

    以下の2つに参照設定を行って、ASPからと同じように、Response.Writeでクライアントへの出力を行ったり、Request.ServerVariablesで環境変数を取得したりすることができます。

    • COM+ Services Type Library(Win2K以降の場合。9xやNTは)
    • Microsoft Active Server Pages Object Library

    ASP組み込みオブジェクトにアクセスするには、GetObjectContextメソッドを使います。Responseオブジェクトを例に取ると

    Dim aspResponse         As ASPTypeLibrary.Response
    
        Set aspResponse = GetObjectContext("Response")
        Call aspResponse.Write("Hello ASP!")
    		

    と言うような感じです。このとき、クラスのMTSTransactionModeプロパティが、"NotAnMTSObject"ではうまくいきませんでした。"Uses Transaction"にするとうまくいきましたが、どういう値であるべきかまでは調べていません。

    また、この処理を、Class_Initiarizeプロシージャに記述したオブジェクトを、Global.asa内で生成したり、アプリケーションスコープのobjectタグで宣言すると、うまく動作しないようです。

(04/01/24 追記)

Applicationスコープにするには、スレッドモデルがBothまたはNeutralのコンポーネントを作成する必要があります。つまり、VBで作成することはできません。

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/106

コメント

丁度ActiveXドキュメントEXEを作成していたところだったので、参考になります。ちなみに、

3.ASP組み込みオブジェクトへのアクセス の
COM+ Services Type Library(Win2K以降の場合。9xやNTは)

の続きは 「Microsoft Transaction Server Type Library (mtxas.dll) を参照設定に含める」が正しいのではないでしょうか。

そのとおりですね。
これを書いていたときは、
私もまだASPを始めたばかりで手探り状態だったので、間違った情報が含まれています。
たとえばApplicationスコープならシングルスレッドとなっているのは間違いで、スレッドモデルはBoth、またはNeutralである必要があり、つまりVBで作成することはできません。
他にも間違いがあればご指摘ください。

にゃるほど~。
勉強になります。
1週間前から初めて
今日はじめてVB内でRequestとかSessionが
見れることを知りました。
おお!という感じです。

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?