[Notes/Domino] レイト・バインディングしたオブジェクトのメソッドに Nothing を渡すとエラーになる
ノーツでも、VB などと同じように、オブジェクトの生成するのに、アーリー・バインディング(宣言時にNewする方法) と レイト・バインディング(宣言時はVariantにして、後からNewする方法) の両方が使えます。
どっちも動作は変わらないと思っていたのですが、こないだ開発していたら、Nothing を引数に渡した場合に動作が違う場合があることを発見しました。(おかげで半日潰しました...... 😥 ) 以下、再現手順です。
--- 再現手順 ---
1. 以下のようなクラスを作ります。
Public Class CTest
Public Sub Test(doc As NotesDocument) '引数はテスト用につき、使用されません。
Msgbox "test"
End Sub
End Class
2. アーリー・バインディングでオブジェクトを生成し、メソッドをコールします。
Dim t As New CTest
Call t.Test(Nothing) 'メッセージボックスが表示される
3. レイト・バインディングでオブジェクトを生成し、メソッドをコールします。
Dim t As Variant
Set t = New CTest()
Call t.Test(Nothing) '「型が一致しません」エラーになる
VBA で似たようなことを試してみたら、両方とも問題なく動作したので、これはノーツ特有の問題なのかもしれません。理由は全く解りませんが(TT
ノーツではおとなしくアーリー・バインディングにしておいたほうが無難なのかもしれませんね......。
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。