- ベストアンサー
ActiveXDLL関数の引数ByRefで配列での呼び出し
- 急を要しています。m(__)mなんでもいのでアドバイス、回答お願いいたします。
- 例えばActiveXDLL関数Sub func2(ByRef P1()) ReDim P1(1) P1(1) = 2 P1(0) = 1 End Subのような場合、redim sData(1)’要素数定義i = objSS.func2(sData(0))で使えませんか?(配列は要素の数をASPで定義しておかないとだめなんですよね?)
- あと、ユーザー定義のコレクション型Sub func3(ByRef P1() As VBAFix.Collection) ReDim P1(1) As VBAFix.Collection P1(1).Add "1", "1" P1(0).Add "2", "1" End Subのような場合、redim col(1)Set col(1) = CreateObject("VBAFix.Collection")set objSS = createObject("prjTest.clsTest")i = objSS.func3(col(0))このようにしてつかえませんか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Wizard_Zeroと申します。 お急ぎなのは分かりますが、どのようなエラーが出るのかとか、使っているソフトウェアのバージョンとかは書くようにしましょう。 VB6.0+IIS5.0と仮定して書きます。 まず、ASPからVBに配列を渡すとき、VBではVariant型で受け取ります。 Sub func2(ByRef P1) さらに、ASPのコードを下記のように書き直してみてください。 Dim sData() '[1] objSS.func2(sData) '[2] [1] func2の中で配列を再定義しているので、ASP側でReDimする必要はありません。 [2] func2はメソッドですから、戻り値を返しません。 また、配列を渡すときは変数名だけで大丈夫です。 func3も同様にVariant型で受け取ります。 Sub func3(ByRef P1) ReDim P1(1) As VBAFix.Collection ↑VB6.0の場合、このような定義はできません。 ReDim P1(1) で大丈夫です。 ところで、VBAFixって何でしょう? VBAのCollectionオブジェクトであればASPからは使えなかったと思います。Collectionに相当するオブジェクトとしてはScripting.Dictionalyがあります。 変数はVariant型の配列なので、このあと Set P1(0) = CreateObject("Scripting.Dictionary") Set P1(1) = CreateObject("Scripting.Dictionary") としてください。 次にASP側。 set objSS = createObject("prjTest.clsTest") ↑Server.CreateObjectだと思います。 i = objSS.func3(col(0)) ↑これもメソッドですから戻り値はありません。 objSS.func3(col) で大丈夫だと思います。 ASPコードは Dim col Set objSS = Server.CreateObject("Scripting.Dictionary") objSS.func3(col) とすれば大丈夫です。 一応、こちらでも同様のインターフェイスを持つActiveXDLLをつくりIIS5.0で動作確認しました。
補足
ありがとうございます。試してみます。