|
出来るのだASP Q&A掲示板(過去LOG)
訪問数 52046
昨日 889
今日 776 【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。 |
Topに戻る
掲示板に戻る
検索
削除
管理者
|
![]()
DLL内からSessionを読み書き可能?
北岳さん
[2002/01/13 0:28:42]
[1382]
|
発言者により削除されました!!
北岳さん
[2002/01/13 3:20:19]
[1383]
無理みたい
北岳さん
[2002/01/13 11:23:25]
[1384]
Re:無理みたい
Tomitomiさん
[2002/01/13 12:57:45]
[1385]
Re:無理みたい
北岳さん
[2002/01/13 18:50:12]
[1386]
できるようですけど?
喜平さん
[2002/01/15 1:18:34]
[1387]
Re:できるようですけど?
北岳さん
[2002/01/15 19:17:32]
[1404]
こんな感じで・・・一番単純なサンプルです
喜平さん
[2002/01/16 8:47:17]
[1405]
ありがとうございます。できました。
北岳さん
[2002/01/16 12:32:37]
[1409]
スペルミス
北岳さん
[2002/01/16 13:28:00]
[1411]
|
| [1382] DLL内からSessionを読み書き可能? |
| 投稿者:北岳さん 2002/01/13 0:28:42 |
| ASPがらみのVB(ver5)で質問致します。 ------(現ASP)-------- <% 〜 x=Session.Contents("a") 〜 Session.Contents("b")=yy 〜 %> ---------------------- というVBScriptの ASPを、高速化を狙って、そっくりVBで書き直しDLLにしてしまい、 ASPの方は(SessionをDLL内から呼ぶことで、引数も戻り値も不要となる筈ですが) 関数を呼出して、 ------(ASP側)-------- <% set obj=Server.CreateObject("Proj1.Cls1") z=obj.func() %> ---------------------- で片付けたいのですが、VB5のcls内に書くべき ■SessionオブジェクトのProgID が判りません。 regeditで探し出した、それらしいキー「ASP Session Object」の項を見ると、 ここの CLSIDは HKEY_CLASSES_ROOT\CLSID\{D97A6DA0-A865-11cf-83AF-00A0C90C2BD8} となっていました。が、その番号の項目にも ProgIDが書かれていませんでした。 (自宅WIN98+PWSのASP使用マシンにて。会社のNT4+IISは見ていません。) ------(VB側)-------- Public Function Cls1(dummy as variant) as variant 〜 set ss=CreateObject("?") x=ss.Contents("a") 〜 ss.Contents("b")=yy 〜 end function ---------------------- の?の行は、こういう場合はどう書けばよろしいのでしょうか。 VBヘルプと VB-BooksOnLineでは判りませんでした。 Sessionを読み書きする場合だけASPで行うなら、〜を3つのメソドに分ければ可能ですが、 DLL内でSessionに直接アクセスできれば、ASP〜DLL間でvariant戻り値⇒配列等の変換をしなくて済み、 今後のASP側記述がとても楽になる、と目論んでいます。 |
| [1383] どうやら無理のようでした。 |
| 投稿者:北岳さん 2002/01/13 3:20:19 |
| 発言者により削除されました!! |
| [1384] 無理みたい |
| 投稿者:北岳さん 2002/01/13 11:23:25 |
| regeditで、BASP21を真似して ProgID:(標準)"kitadakesession.1" Programmable:(値の設定なし) VersionIndependentProgID:(標準)"kitadakesession" を書き込んでみました。 ----DLLソース--------- Public Function KtSession(dummy As Variant) As Variant Dim ss Set ss = CreateObject("kitadakesession.1") '(*) ss.Contents("fuji") = "富士" '(**) KtSession = "槍" End Function ---ASP---------- <% dim kobj set kobj=Server.CreateObject("Proj1.Cls1") dummy=1 ret=kobj.KtSession(dummy) 'エラー発生行 response.write "<br>" & ret '槍を得たい response.write "<br>" & Session.Contents("fuji") '富士を得たい %> ----------------- 結果: 「5行目 エラー '800a01ad' ActiveX コンポーネントはオブジェクトを作成できません。 」 でした。 ss.Session.Contents("fuji") = "富士" でも同じ。 念のため '(*)(**)をコメントアウトしたら、ASP画面に「槍」は表示されました。 (DLLをやめフォームモジュールで実行させると、(*)で 同じエラーが発生。 VB単独、ASPが動いていないので、こちらは当然に思えます。) (愚痴)何かやるたびにマシンをリブート。ASPから呼ぶDLLって、厄介ですねえ。 |
| [1385] Re:無理みたい |
| 投稿者:Tomitomiさん 2002/01/13 12:57:45 |
| こんにちは、Tomitomiです。 > (愚痴)何かやるたびにマシンをリブート。ASPから呼ぶDLLって、厄介ですねえ。 動くまでが、厄介です。w 動けばあとは、DLLをライブラリとして持てば使い勝手いいのですがね。。 ひとつ、VBからセッション等をなんとかするのは全然わからないのですが、 ASPでCallしたものは、ユーザがすべて「User」だったかな?。になります。 これは、DLLもBasp21でexeをキックしても、いっしょです。 とりあえず、情報として。。 |
| [1386] Re:無理みたい |
| 投稿者:北岳さん 2002/01/13 18:50:12 |
| レスありがとうございます。 >動けばあとは、DLLをライブラリとして持てば使い勝手いいのですがね。。 incと違い DLLは1つでよいし、これは実感しています。 ところでDLL内でSession を CreateObjectしても、クライアントの情報をDLL側に伝えない限り、読み書きする先が不明でした。 ユーザの情報が必要ですが、仮に環境変数などから得ても、渡し方が?? tomitomiさんご教示のUSER?も、いずれ調べたいと思っています。 WEBではこれら情報を探せませんでしたので、最初に戻りまして・・・ SessionをDLL内から呼びたい理由は、DLLの戻り値が配列のときにASPで for each c in 戻り値 のように「解凍」するのがかったるいため。 で、当面はその都度ASP側でカッタルイことをして逃げることにします。 |
| [1387] できるようですけど? |
| 投稿者:喜平さん 2002/01/15 1:18:34 |
| vb6 のwebclass が自動的に作るasp を見れば、ヒントになると思いますが・・・ いってしまえば、単に、activex dll のメソッドにsession を 渡せば、利用可能です。他のasp組み込みオブジェクトも 同様です。 詳しくは、vb magazine 2000/7 月号を読んでください。 ちなみに、session オブジェクトは、コンポーネントの一部 ですので、ProgID など存在しません。 VB で参照するならば、参照設定で・・・ asp.dll を登録するか、 Microsoft Active Server Pages Object Library をリストから探してチェックすればよいです。 |
| [1404] Re:できるようですけど? |
| 投稿者:北岳さん 2002/01/15 19:17:32 |
| ありがとうございます。折角のご情報ながら、うまく行きませんでした。 ご紹介のVB6と雑誌がないまま、NT4本番サーバをバックアップしているWIN2000端末でやりました。 VB5の参照設定で Microsoft Active Server Pages Object Library を登録して (後述★の意図に沿いそうな)コードを書いてみましたら、最初は 「オブジェクトが見つかりません」でした。 ----雑談始め--- で、レジストリのASP Server Object にProgIdを命名するといういたずらを再度しましたら、 IISが死んでしまって、停止再稼動しても、今のところ生き返りません。 HTMは開けてもASPは動かないという、8002801dエラー。 http://www.iisfaq.com/Articles/219/ まあ、本番サーバでなかったのが幸いでした。 で、ほかにまだ2台が生きていますので、死んだ者は当分放っぽっておきまして、 ----雑談終り--- > いってしまえば、単に、activex dll のメソッドにsession を > 渡せば、利用可能です。 とは、DLLからSession変数の数の分だけPublic変数を得る、ということでしょうか。 Session変数の中身を引数にして与え、戻り値を改めてSession変数に入れ直せば、 DLL内からSessionオブジェクトを呼ぶ必要はなくなり、普通のDLLで作れますが、 ★やりたいこと: 実は複数の配列変数を多数のSession変数に入れています。 DLLには、引数として(与えるにしてもSession.SessionID 以外は)何も与えず、 戻り値も何も貰わず、 DLL内部でASPのSession変数を読みこみ、それを元に計算等の処理をしてDLL内でSession変数を書き換え、 ASPからDLLを呼んだ前と後で、Session変数の中身が、 ---ASPから見ればいつの間にか--- 書き換わっている、 DLL自体は操作だけ行い、ASPに戻り値・メソッドの類は何も返さない、 ということは、可能そうでしょうか。 |
| [1405] こんな感じで・・・一番単純なサンプルです |
| 投稿者:喜平さん 2002/01/16 8:47:17 |
| <% Option Explicit %> <!--#INCLUDE virtual="/include/lib.asp"--> <% DIM ASPObjectTest Set ASPObjectTest = Server.CreateObject("ASPObjectTest.Class1") Session("test")=1 resbr Session("test") ASPObjectTest.test1 session resbr Session("test") %> ---------- activex dll -------- Dim mSession As Object Public Sub test1(Session1 As Object) Set mSession = Session1 mSession("test") = "test" End Sub |
| [1409] ありがとうございます。できました。 |
| 投稿者:北岳さん 2002/01/16 12:32:37 |
| 喜平さん、ありがとうございました。 aspを少し手直ししまして: INCLUDE virtual="/include/lib.asp"を削除、 resbr を削除 しまして、所望のDLLが得られました。 Sessionコレクションをまとめて渡せたのですね。 これをヒントに、ASP側で for each c in Session.Contents response.write "<br>" & Session.Contents(c) next とやったら、こちらも使えました。 なおDLL内で新たに作ったSession変数はうまく扱えなかったのですが、ASP側で変数名だけ用意することで、解決しました。 これで、今まで作ったASPを殆ど書き換えずにVBに移しDLL化しても、 Session の中身を次のASPに渡せそうです。 大変感謝です。 --------------------------------------------- (追伸) 昨日レジストリをegeditでいたずらしたら、IISが死んだと思いました。 昨日はegeditで元に戻しても直らなかったのですが、 帰宅途上で、「HTMは開くので、死んだのはASPだけ」と思いつきました。 今朝DOS窓からredsvr32 経由でasp.dllを 再登録したら、息を吹き返しました。 結局、死んだと思ったのは早とちりでした。 一晩気を失っていただけ・・・ |
| [1411] スペルミス |
| 投稿者:北岳さん 2002/01/16 13:28:00 |
| 訂正します。 > 昨日レジストリをegeditでいたずらしたら、 ⇒regedit > 今朝DOS窓からredsvr32 経由でasp.dllを 再登録したら、 ⇒regsvr32 |
|
TreeBBS For ASP V.0.1.3 |