- PR -

[VB.NET]MDI形式でDLLを呼び出すには

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-05 19:07
普通にできますけどね。
以下、ミニマムコード。

コード:

    Public Interface IMosaMosaAA
        Sub MakiMakiLove()
    End Interface

    Public Class Form1 : Inherits System.Windows.Forms.Form : Implements IMosaMosaAA
        Public Sub MakiMakiLove() Implements IMosaMosaAA.MakiMakiLove
            MessageBox.Show("サラマンダーより……はやーい!")
        End Sub

        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim hForm2 As New Form2()

            Me.IsMdiContainer = True
            hForm2.MdiParent = Me
            hForm2.Show()
        End Sub
    End Class

    Public Class Form2 : Inherits System.Windows.Forms.Form
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim hParentForm As Form = Me.MdiParent

            If TypeOf hParentForm Is IMosaMosaAA Then
                DirectCast(hParentForm, IMosaMosaAA).MakiMakiLove()
            End If
        End Sub
    End Class


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
おすぎ
会議室デビュー日: 2005/02/22
投稿数: 5
投稿日時: 2006-04-05 20:09
>>ところで、親フォームは子フォームの DLL を参照しているわけですが、

はい、参照しています。

>>IFormParent はどこのアセンブリに定義しているのでしょうか。
親フォームも子フォームも IFormParent を参照していますね。

どこの?というのがよくわからないのですが、
ルート名前空間はITestにしています。
それとも別にアセンブリを定義する場所があるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-05 20:33
参照が解決していないとコンパイル解決できないと思うので、
そこらは関係ないと思うのですが、アセンブリのバージョン問題を疑ってるのかな?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
おすぎ
会議室デビュー日: 2005/02/22
投稿数: 5
投稿日時: 2006-04-05 21:08
解決しました。

[修正箇所]
>>Dim a As IFormParent
これを
Dim a As ITest.IFormParent
このようにしました。

[原因]
前スレ渋木様の
>>・IFormParent のプロジェクトを、親フォームおよび子フォームのプロジェクトから>>参照する。

を理解できず、インタフェースのDLLの参照と、なぜかソースも追加していました。
それでDimの所で、追加したソース側を見に行ってたようです。
ソースをはずして、
>>Dim a As IFormParent
で通ることも確認しました。

囚人様、じゃんぬねっと様
本当にありがとうございましたm(__)m
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-05 21:34
プログラムだけでなく、投稿の仕方も、まねて欲しいなぁ。。。

> a = CType(Me.ParentForm, IFormParent) ←ここでエラー
そのエラーメッセージが、重要な情報なんです。
 最近の例外メッセージは、なぜ発生したのかが書かれています。リファレンスを見れば、どの様に修正すればいいかが、たいてい書かれています。よく読んでください。


 こういう叱責調で書くと「すみません」と返されることが多いですが、損をしているのはご自身なのですから、ご自身に謝っておいてください。


ご参考:
設計とデバッグ
設計しよう/デバッグしよう

〆 written by Jitta@わんくま同盟 on 2006/04/05
□ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006

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