出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

COMとの連携   初心者くんさん [2002/07/05 9:09:32] [2275]
  Re:COMとの連携   北岳さん [2002/07/05 13:01:43] [2277]
    Re:COMとの連携   初心者くんさん [2002/07/10 11:36:07] [2303]
      Re:COMとの連携   北岳さん [2002/07/12 10:52:28] [2321]

[2275] COMとの連携
投稿者:初心者くんさん 2002/07/05 9:09:32
COMのメソッドの引数に配列があるのですが、
ASPから
dim strArray(2)
strArray(1) = 'A'


objtest = createobject(クラス名)
objtest.method(strArray())
と呼ぶと型が一致しないというエラーがでます。
ほかにもstrArray(2)とかstrArrayでためしてみたのですが
だめでした。
どうか教えてください。

[2277] Re:COMとの連携
投稿者:北岳さん 2002/07/05 13:01:43
VBScript では、変数のデータ型は常にバリアント型です。
(DIM strArray(2) as string のような型宣言はできません。)
ASPはバリアント型の配列を渡しますが、受け取るCOM側がVB-DLLで、
dim strArray(100) as string
と宣言してあれば、形違いが生じます。
 
私は、a=strArray()⇒objtest.method(a) で渡して、COM側で配列aを文字列型に直します。
 
COM側は、ASPとやりとりするには、全部Variantにしておき、VBプロシージャ内で(必要なら*)型変換します。
Public Function hoge(a As Variant, x As Variant, y As Variant) As Variant
*例えばmid関数を使いたければ、プロシージャ内でCstrで文字型に変える必要が出ます。

[2303] Re:COMとの連携
投稿者:初心者くんさん 2002/07/10 11:36:07
回答ありがとうございます。
さっそくバリアント型にしてみたのですが、
やはり型が一致しないというエラーが表示されます。

COM側の宣言
public function test(a() as variant) as variant

ASP側の呼び出し
dim a(2)
a(0)="test"
a(1)="test2"
b = object.test(a)
ほかに引数の書き方としてa(),a(2)とやってみたのですが
だめでした。

宣言の仕方が間違ってるのでしょうか?

[2321] Re:COMとの連携
投稿者:北岳さん 2002/07/12 10:52:28
public function test(a as variant) as variant
関数の戻り値test自体が配列として、

ASP側の呼び出し
dim x(2)
x(0)="あ"
x(1)="い"
set obj=CreateObject("project1.class1")
a=x
b = obj.test(a)
for i=1 to 2
response.write "<br>" & i & "---" & b(i)
next

でうまく行く筈ですが・・・



TreeBBS For ASP V.0.1.3
Program By YasNet