VB6のocxをVB.netから呼び出すと「種類が一致しません。」というエラーが発生しました。
VB6で作成したActiveX DLLに、ByRef Stringが設定されていると、VB.netから呼び出すときにエラーが発生するようです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33920&forum=7
こちらのページを見ると、いろいろ書いてあるのですが、いまいち理解することも解決することもできず、困っていました。
スポンサーリンク
上記ページの例と同じように、以下のメソッドが、VB6で作成したActiveX DLLに作成されているとします。
Public Function ByRefMethod(ByRef str As String) As Integer
str = "バイレフ"
End Function
str = "バイレフ"
End Function
次のように呼び出したら、エラーが発生します。
Dim str As String
Dim rtn As Integerrtn = ByRefMethod(str)
Dim rtn As Integerrtn = ByRefMethod(str)
他の状況でうまくいくかどうかわからないのですが、解決策を見つけました。
以下のようにコードを変更するだけです。
Dim str As String = ""
Dim rtn As Integerrtn = ByRefMethod(str)
Dim rtn As Integerrtn = ByRefMethod(str)
strに空の文字列を初期値として設定しただけで、エラーが発生しなくなりました。
同じ状況で困っている方は、数秒で試すことができるので、一度やってみてください。