- PR -

コレクションの型の違い

1
投稿者投稿内容
TERU
会議室デビュー日: 2006/02/20
投稿数: 8
投稿日時: 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側の部品は変更することはできない前提。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2007-11-13 17:30
興味があって探してみました。

http://support.microsoft.com/?kbid=323737

VB6DLLをラップしてVBA.Collectionを返すようにしたVB6DLLを作ることになるのかな。
TERU
会議室デビュー日: 2006/02/20
投稿数: 8
投稿日時: 2007-11-14 09:26
回答ありがとうございます。

私も調査した結果、同様のURLにたどり着きました。
VBA.Collectionを返すVB6DLを新規に作成して、試してみます。

ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-14 10:40
Scripting.Dictionary で代用するという方法はダメですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
TERU
会議室デビュー日: 2006/02/20
投稿数: 8
投稿日時: 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)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-14 22:01
引用:

TERUさんの書き込み (2007-11-14 20:45) より:

下記のコードで検証してみましたが、同様の例外が発生しました。


まったく触れられていないので確認しますが、MethodA の定義はどのように変更しましたか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
TERU
会議室デビュー日: 2006/02/20
投稿数: 8
投稿日時: 2007-11-15 09:20
VB6DLLは変更しない前提の為、MethodAは変更していません。
MethodAにも同様の型定義が必要なのでしょうか?

VB6DLLには以下のメソッドが実装されています。
 MethodA(Byval ValParam as Variant,ByRef ColParam as Collection) as Boolean
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-15 10:09
引用:

TERUさんの書き込み (2007-11-15 09:20) より:

VB6DLLは変更しない前提の為、MethodAは変更していません。


あ、そうでしたか。 それならどうしようもないので忘れてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)