- PR -

ASPよりC#COMの呼び出しについて

1
投稿者投稿内容
じゅんぺい
会議室デビュー日: 2003/12/24
投稿数: 3
投稿日時: 2004-01-16 12:12
お世話になっております。

ASPよりC#COMを呼び出していますが、
COMからのバリアント配列の受け取りが上手く行きません。

処理としてstrSQLに指定されたクエリ実行SQLを実行し、結果を
配列にセットして返却します。(最終的には2次元配列にしたい。)

実行すると、次のエラーが表示されます。
-------------------------------------------------------------
●エラー タイプ
Microsoft VBScript 実行時エラー (0x800A0005)
プロシージャの呼び出し、または引数が不正です。: 'ExecQuery'
/test.asp, line 34  ←'クエリ実行の行を示します。
-------------------------------------------------------------

なんとなくマーシャリングがあやしい?と思っているのですが・・。
サポートされていないのでしょうか?
また、VB上ではきちんと動いているのですが、ASP上からの動作が
エラーになります。

ソースを下に載せておきました。

もし、ご存じの方いましたら、ご教示頂けないでしょうか?

以上、宜しくお願い致します。

#WindowsXP(SP1),2000(SP4) + IIS
#VisualSutdio .NET2003
#VisualSutdio6.0(SP5)


//////////////
//添付ソース
//////////////

【C#COMのI/F:ProgID=Test.ExecCommand】
//------------------------------------------------------------------
//クエリ実行I/F
//------------------------------------------------------------------
int test(
[In]string strSQL, //SQL文
[Out,MarshalAs(UnmanagedType.LPArray,
ArraySubType = UnmanagedType.LPStr)]
out object[] objResult); //結果セット



【ASP側のコード:test.asp】
Dim obj
Dim Result
Dim rows
Dim cols
Dim row
Dim col
Dim ret
dim sql

'COMインスタンス生成
set obj = CreateObject("Test.ExecCommand")

'SQL文作成
sql = "select * from test"

'クエリ実行
ret = obj.ExecQuery(sql, Result)

'件数取得
rows = UBound(Result, 1)

'列数取得(とりあえず、コメント)
'cols = UBound(Result, 2)

'結果表示
For row = 0 To rows
Response.Write(Result(row))
Next
1

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