- - PR -
コレクションの型の違い
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-13 17:09
いつもお世話になっております。
VS2003(VB.Net)からVB6で製造されたDLLをコールしたいのですが、 例外となってしまいます。ご存知の型がおりまりたら、ご教授願います。 VB6DLLには以下のメソッドが実装されています。 MethodA(Byval ValParam as Variant,ByRef ColParam as Collection) as Boolean 上記メソッドをVS2003から呼び出す為に下記のコードを実装しております。 ''VB6のインスタンス生成 Dim oTest As Object = Nothing oTest = CreateObject("Test.TestClass") ''パラメータ定義 Dim oParamA as Object = New Object() {"Test"} Dim colParamB as New Collection dim ret as Boolean ret = oTest.MethodA(oParamA,colParamB) しかし、上記コードだと、例外が発生してしまいます。 "System.Runtime.InteropServices.COMException (0x80020005): 種類が一致しません。 恐らくCollection型がVB6とVS2003とで異なっているからだと思うのですが、 解決方法はないでしょうか? ※VB6側の部品は変更することはできない前提。 | ||||
|
投稿日時: 2007-11-13 17:30
興味があって探してみました。
http://support.microsoft.com/?kbid=323737 VB6DLLをラップしてVBA.Collectionを返すようにしたVB6DLLを作ることになるのかな。 | ||||
|
投稿日時: 2007-11-14 09:26
回答ありがとうございます。
私も調査した結果、同様のURLにたどり着きました。 VBA.Collectionを返すVB6DLを新規に作成して、試してみます。 ありがとうございました。 | ||||
|
投稿日時: 2007-11-14 10:40
Scripting.Dictionary で代用するという方法はダメですか?
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-11-14 20:45
回答ありがとうございます。
下記のコードで検証してみましたが、同様の例外が発生しました。 ''VB6のインスタンス生成 Dim oTest As Object = Nothing oTest = CreateObject("Test.TestClass") ''パラメータ定義 Dim oParamA as Object = New Object() {"Test"} Dim colParamB as New Object colParamB = CreateObject("Scripting.Dictionary") dim ret as Boolean ret = oTest.MethodA(oParamA,colParamB) | ||||
|
投稿日時: 2007-11-14 22:01
まったく触れられていないので確認しますが、MethodA の定義はどのように変更しましたか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-11-15 09:20
VB6DLLは変更しない前提の為、MethodAは変更していません。
MethodAにも同様の型定義が必要なのでしょうか? VB6DLLには以下のメソッドが実装されています。 MethodA(Byval ValParam as Variant,ByRef ColParam as Collection) as Boolean | ||||
|
投稿日時: 2007-11-15 10:09
あ、そうでしたか。 それならどうしようもないので忘れてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1