- PR -

VS.net2005での型変換のエラーについて

1
投稿者投稿内容
Soybean
会議室デビュー日: 2005/09/13
投稿数: 6
投稿日時: 2007-01-10 13:52
お世話になっております。
過去ログを参照しましたが、解決に至りませんでしたので、
書き込みさせて頂きます。

開発環境はVS.net2005です。

MDI画面を使用しておりMDIの親画面(fmMain)から、
子画面A(fmChild_A)を表示し、子画面A上のボタンクリックで、
子画面B(fmChild_B)を表示させようとしています。

子画面Aと子画面Bは別DLLで作成してあります。

子画面Bを表示する際、親画面のクラスを使用して
表示を行いたいと思っています。

親画面クラス(Businessクラス)のインスタンスを行わずに使用したいため、
親画面の中でパブリックプロパティ(MainBusiness)を使用して
渡しています。

**********************************************************
fmChild_Aのソース

'MainのBusinessクラスを宣言
Dim main As Main.Business

'自分の親画面をfmMain型に変換してプロパティの値を取得
main = CType(Me.MdiParent, fmMain).MainBusiness ←エラー発生

'fmChild_Bの表示
main.CreateChildWindow("Sample.dll", "fmChild_B")

**********************************************************

2003でコーディングしていた時は、このソースで正常に動作していたのですが、
2005で動かしたところ、コンパイルは正常終了しており、エラーも警告も
出ないのに、実行すると以下のようなエラーで落ちてしまいます。
「型 'fmMain' のオブジェクトを型 'fmMain' にキャストできません。」

Me.MdiParentを一度、Object型にした後、再度fmMain型にキャストしても、
やはり同じエラーとなってしまいます。

何かご存知の方がいらっしゃいましたら、ご教授の程宜しくお願い致します。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-10 15:15
引用:

Soybeanさんの書き込み (2007-01-10 13:52) より:

「型 'fmMain' のオブジェクトを型 'fmMain' にキャストできません。」


これ、意味不明な例外メッセージですね。
型が合っているのにキャストできないとは...
名前空間が違った別のクラスなんてことはないですよね。

とりあえず、再現できるミニマム コードを提示できないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-10 21:40
 Web Service を利用したアプリケーションを作ったときに、同じようなエラーを出した記憶が。。。

 原因は、じゃんぬさんのおっしゃるとおり、名前空間が違った別のクラスでした。
 Web Service のサーバ側でシリアライズしたものを、クライアントでデシリアライズ出来なかったんですね。両方で同じ名前のクラスを作っていて、VB の場合、ルートの名前空間がプロジェクトのプロパティに隠れているため、同じだと思いこんでいたという落とし穴でした。
# イヤ、定義が2つあるのがおかしいと気付よ


 ちげ〜

 この場合、実行時型解決なのが問題じゃないかな?

[ メッセージ編集済み 編集者: Jitta 編集日時 2007-01-10 21:42 ]
1

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