• 締切済み

VB6で作成した自作DLLをVB.NETで呼び出し例外発生時に参照渡しの引数に値を設定する方法

VB6で作成した自作のDLLをVB.NET2005で作成したEXEから呼び出した際に、DLLメソッドの正常・異常終了に関わらず第2引数の戻り値に第1引数の値を設定したいと考えていますが旨くいきません。 何かよい方法はないでしょうか? 以下、簡単なサンプルです。 =========================== VB6 DLL =========================== Public Sub getDataForTest(ByVal strIn As String, ByRef strOut As String) Dim intData As Integer 'strInの値をstrOutに代入 strOut = strIn 'strInの値を1で割り算 intData = CInt(strIn) / 1 End Sub =============================================================== =================== DLL呼び出し正常パターン =================== Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objCom As New Project1.Class1 Dim strRet As String = "" Try Call objCom.getDataForTest("1", strRet) Catch ex As Exception MsgBox(ex.Message) Finally MsgBox(strRet) ←←← 1が表示される  End Try End Sub =============================================================== =================== DLL呼び出し異常パターン =================== Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objCom As New Project1.Class1 Dim strRet As String = "" Try Call objCom.getDataForTest("A", strRet) Catch ex As Exception MsgBox(ex.Message) Finally MsgBox(strRet) ←←← この時にAを表示したいがstrRetが空  End Try End Sub ===============================================================

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

VB6のDLL側で エラートラップを仕込まないといけないみたいですよ Public Sub getDataForTest( ... )   Dim intData As Integer   'strInの値をstrOutに代入   strOut = strIn   ' エラートラップを設定   On Error Resume Next   'strInの値を1で割り算   intData = CInt(strIn) / 1   if Err.Number then     ' 何らかのエラー処理   end if   ' エラートラップを解除   On Error goto 0   ' 任意の処理 End Sub

amanda9310
質問者

お礼

回答ありがとうございます。 DLL側でエラーを無効にして、 EXE側で例外をキャッチしないようにすればいいわけですね。 参考にします。 出来れば、EXE側で何とか出来ればいいのですが。。。

noname#245936
noname#245936
回答No.1

VB.NETよく判りませんが。 確か、.NETはRefの戻り値はRef型で引数をあげないといけない ような気がします。 ちなみに。 .NET移行にかかわらずVB6のDLLを利用する価値がイマイチ見出せ ません。RegSvr32でエントリしないといけないし、VBランタイムも 必須ですし、処理のオーバヘッドもあると。 Distributionが簡潔になるのもまた.NETのウリですので。 DLLの.NET化を試したいところだと思います。

amanda9310
質問者

お礼

回答ありがとうございます。 同感です。 今回は、 提供されているDLLをそのまま使用しないといけないため、 仕方がないのですが、 今後の開発からは、その方向で検討していきたいと思います。