tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルクラスライブラリに構造体を渡す
記事No6335
投稿日: 2007/09/20(Thu) 22:04
投稿者キジ

ダメ元でお伺いします。

クラスライブラリを作っています。
クラスライブラリ内部に自作の構造体aaaTblのデータを渡すために
プロパティを
Public WriteOnly Property aaaData() As aaaTbl
と作ってみたのですが
「'aaaData' は、型 'xxxxxx.aaaTbl' を class 'Class1' 経由でプロジェクトの外側に公開できません。」
というエラーが発生しました。

メソッドで
Public Sub SetaaaData(ByVal taaaTbl As aaaTbl)
とやってみても同じでした。

これは、クラスライブラリを呼び出す側は不特定多数なので構造体aaaTblなんて分からないから
所詮ムリってことでなんでしょうか?
(呼び出し側アプリのプロジェクトにも同じ構造体のプロシージャはありますけど・・・)

やはり構造体メンバ1個ずつプロパティを作成するかArrayListとかでまとめて送るか
しかないのかとあきらめかけていますが、他に効果的な方法はないでしょうか?

[ツリー表示へ]
タイトルRe: クラスライブラリに構造体を渡す
記事No6336
投稿日: 2007/09/20(Thu) 22:28
投稿者魔界の仮面弁士
> 「'aaaData' は、型 'xxxxxx.aaaTbl' を class 'Class1' 経由でプロジェクトの外側に公開できません。」
> というエラーが発生しました。
まず、「Structure aaaTbl」が Public になっているかを確認してみてください。
構造体自体は Public にしているのに、そのようなエラーが出てしまうのであれば、
その上にあたる「Module xxxxxx」「Class xxxxxx」などが Public になっているかを
確認してみてください。


> (呼び出し側アプリのプロジェクトにも同じ構造体のプロシージャはありますけど・・・)
アプリA で定義された aaaData と、ライブラリB で定義された aaaData とは、
それぞれ別物である事に注意してください。両者は名前空間が異なりますよね。

同じ構造体を使いたいなら、その構造体をライブラリB で定義して、
アプリA は、それを参照設定して利用するようにすれば OK です。

[ツリー表示へ]
タイトルRe^2: クラスライブラリに構造体を渡す
記事No6337
投稿日: 2007/09/21(Fri) 00:02
投稿者キジ
魔界の仮面弁士さん、ご回答いただきありがとうございます。

> その上にあたる「Module xxxxxx」「Class xxxxxx」などが Public になっているかを
> 確認してみてください。

↑こちらの方でした。


> アプリA で定義された aaaData と、ライブラリB で定義された aaaData とは、
> それぞれ別物である事に注意してください。両者は名前空間が異なりますよね。
>
> 同じ構造体を使いたいなら、その構造体をライブラリB で定義して、
> アプリA は、それを参照設定して利用するようにすれば OK です。

前もってアドバイスいただいたのですが、いざコーディングして意味が分かりました。
例え実質が同じものでも、名前空間が違うと型としては当然違う物になりますよね。
だから、そのままプロパティに代入できない・・・。
ご教示いただいた通りにするのが正解なのだとは重々承知なのですが
思想的にaaaTblはアプリAにあるようにしたので、
アプリA のaaaTblからライブラリBのaaaTblにデータを渡すのに
心ならずもCopyMemory使う荒技で対処しています(苦)。

[ツリー表示へ]