カテゴリー
VB6

ユーザー定義型はクラスやフォームに渡せない

おそらくCOMの仕様が絡んでくるからだと思うが、クラスやフォームにはユーザー定義型(構造体)は引数で渡せない。
代案としては、
・グローバルのスコープを持たせた構造体を用意し、そこに値をセットして渡す。
・構造体の各値を取得する関数をどこかに用意して、クラス内からはをそれを呼び出す。
 または、構造体を真似たクラスを作って用意しておく。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9812/vb6/

しかし、PublicではなくFriend指定のメソッドにすれば構造体を引数に渡すことが出来ます。
Friendはプロジェクト内からのみ呼び出し可能な特殊なスコープ。
Publicにした場合は他のプロジェクトからも呼び出せる。
クラスをActiveX DLLに出来ることをイメージすると違いがつかみやすいかも。
クラスはDLL化出来るが、そのDLLの公開するインターフェースを定義する場合はPublic、
公開せずにActiveX内でのみ使う場合はFriendに設定するような使い分けをする。
おそらく、Publicで定義型が使えないのは、他のプロジェクトにはそのユーザー定義型が登録されていない可能性があるからだと思われる。
Friendならば、自プロジェクトからしか呼び出されないので、そういうことは考えなくても良くなる。

この記事を書いた人: A-tak

A-tak.com(えいたっく どっとこむ)の管理人。
Apple野郎なおっさんでしたが、ちょっと最近のAppleには飽き気味。
A-tak.comは2002年2月から運営(前身のサイトは1999年3月から)。今年で18年目!

Youtube / Twitter / Mastodon / Facebook

コメントは受け付けていません。