• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#で作成したdllをVBScriptで使うときのマーシャリングの問題)

C#で作成したdllをVBScriptで利用する際のマーシャリングの問題

このQ&Aのポイント
  • C#で作成したdllをVBScriptで使用する際には、マーシャリングの問題が発生します。
  • 質問者はClassicASPでWebアプリケーションを開発しており、C#で作成したdllをCOM登録して利用しようとしていますが、データの受け渡し部分で問題が発生しています。
  • 特に困っているのは、C#側の関数の戻り値として独自のクラス(構造体)の配列を返したいということです。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

VBScriptでは変数に型がありません。当然、構造体もありません。 Variant型で、形式が配列であるデータを返すようにしないと成功 しません。 また、要素が構造体なので、これ自体を別途、クラスとして登録 するか、文字列の配列として扱うようにする必要があります。 「VB用と同じ」と考えて設計したのであれば、全体の設計を見直す ことを薦めます。

ayumi_g
質問者

お礼

度々すみません、解決しました! C#側でObjectの配列を返すようにし、その中にClassにしたTestDataを入れるようにしたら無事ASP側で受け取ることが出来るようになりました。 Variant型しかないのでObject配列で受け取る必要があったのですね。 本当にありがとうございました。 以下解決コードです。 ASP側 <%@ Language=VBScript%> <% Response.ContentType = "text/html" Dim testObject set testObject = Server.CreateObject("TestObject") list = testObject.getList() Response.Write(TypeName(list)) %> C#側 public class TestData { public String title; } public interface ITestObject { Object[] getList(); } public class TestObject : ITestObject { public Object[] getList() { Object[] result = new Object[2]; TestData data; TestData[0] = data = new TestData(); data.title = "1"; TestData[1] = data = new TestData(); data.title = "2"; return result; } } 本当にありがとうございました。

ayumi_g
質問者

補足

お返事ありがとうございます! こんなにも直ぐにご回答いただけるとは思っていませんでした。ありがとうございます。 >VBScriptでは変数に型がありません。当然、構造体もありません。 >Variant型で、形式が配列であるデータを返すようにしないと成功 >しません。 なるほど、、つまりObject配列を返して、その中にはプリミティブなデータ型しか入れることはできないという認識でよいのでしょうか? >これ自体を別途、クラスとして登録 >するか、文字列の配列として扱うようにする必要があります。 文字列の配列にするのは最終手段と思っていたのですが、 別途クラスとして登録というのはC#とVBScriptどちらでクラスを作成するのでしょうか? >「VB用と同じ」と考えて設計したのであれば、全体の設計を見直す >ことを薦めます。 実験的にエクセルVBAで試していて、そちらで出来たのでVBScriptでも大丈夫だろうと楽観していました。 見直しをしようと思います、ありがとうございます。

関連するQ&A