• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ActiveXDLL関数の引数ByRefで配列での呼び出し)

ActiveXDLL関数の引数ByRefで配列での呼び出し

このQ&Aのポイント
  • 急を要しています。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))このようにしてつかえませんか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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で動作確認しました。

lord_chan
質問者

補足

ありがとうございます。試してみます。