たぶんこれは、文字列を文字列へのポインタに読み替えているために起きるのではないかと思います。
ポインタは4バイト、Long型も4バイトなので、長さの上では衝突しませんよね。
コード:
Dim a As Long
a = ""
これが通らないのは、コンパイラの型チェックによるものです。
このときは "" が文字列として扱われている点に注意してください。
しかし、引数になると話は変わります。
引数の場合、文字列リテラルを直接渡すことがありますよね。
たとえば、こんな感じ↓
コード:
lstrcpy(bp, "Hello, World!")
それを考慮して、引数に文字列を渡すときはポインタとして扱われるのだと思います。
つまり、次のようなことをコンパイラがしているというわけです。
コード:
Dim a As Long
Dim b As BytePtr
b = ""
a = b
> 宣言では、2つともLong型で、通常はコンパイルは通らないと思うので、コンパイラで、「MainWnd.sbp(***) - 型が違います」等のエラーを出したほうが、初心者的には分かりやすいかな、と思います。
こちらの方が親切と言えるでしょうね。
というか、本来こうしなければならないのかも…
ちなみにリテラル文字列が配置されるアドレスは、こちらの環境では4000000番台でした。
ウィンドウは、こんな果てしないところに飛んでいったのですね(笑)