ユーザー定義型を引数にしようと思いコンパイルしたところ、
「パブリック オブジェクト モジュールで定義されたユーザー定義型に限り、クラスモジュール内のパブリックユーザー定義型の要素として使用することができます。」というエラーメッセージが出てしまいます。
過去ログも確認しましたが、VBを始めたばかりの完全な素人の為理解できませんでした。申し訳ございませんが、以下のコードの間違いをご教授お願い致します。
[EXE Form]
Private Sub Command1_Click()
Dim obj1 As Object
Dim rtn As Integer
Dim t1 As typ1
Set obj1 = CreateObject("dll1.Class1")
t1.a1 = "1"
t1.a2 = "2"
rtn = obj1.Mt2(t1)
End Sub
[EXE Module]
Public Type typ1
a1 As String
a2 As String
End Type
Public t1 As typ1
[ActiveXDLL Class]
Type typ1
a1 As String
a2 As String
End Type
----------------------------
Public Function Mt2(t1 As typ1) As Integer
Mt2 = 3
End Function
> 理解できませんでした。
といわれましても、では何を説明すれば良いのか困ってしまいます。
こういう時には、過去ログのうち、どの部分までが理解できていて、
どの部分が分からなかったのかを教えていただけるとありがたいです。
1. 標準モジュールで定義されたユーザー定義型は、Public Functionの
引数には使えません。ユーザー定義型を引数に指定する場合は、それを
「パブリック オブジェクト モジュールで定義」しておく必要があります。
これは言い換えると、ActiveX DLL(または ActiveX EXE等)の
クラスモジュールにてPublic Type宣言せねばならないという事です。
(クラスモジュールは、Instancingプロパティを「Private以外」に
設定しておく必要があります)
2. 呼び出し側のユーザー定義型と、DLL側のユーザー定義型は、
たとえ型名やメンバ構造が一緒だったとしても、別物として扱われます。
ですから、呼び出し側で新たにユーザー定義型を宣言するのではなく、
そのDLLを「参照設定」して、そのDLL内で定義されたデータ型を
利用するようにしてみてください。
ツイート | ![]() |