0

フォームにドラッグされた ActiveX コントロールを使用して、COM 経由で SAP に接続しています。VB6で私は書きます:

Private Sub Form_Terminate()
    SAPBAPIControl.Connection.Logoff
End Sub

Private Sub SAPLogonControl_Click()
    Set SAPBAPIControl.Connection = SAPLogonControl.NewConnection
    SAPBAPIControl.Connection.Client = "100"
    If SAPBAPIControl.Connection.Logon(0, False) Then
        MsgBox SAPBAPIControl.Connection.IsConnected
    End If
End Sub

VB.NET 2010 では、次のように記述します。

Public Class MainForm
    Private Sub MainForm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    AxSAPBAPIControl1.Connection.Logoff()
End Sub

    Private Sub AxSAPLogonControl1_ClickEvent(sender As Object, e As System.EventArgs) Handles     AxSAPLogonControl1.ClickEvent
        AxSAPBAPIControl1.Connection = AxSAPLogonControl1.NewConnection()
        AxSAPBAPIControl1.Connection.Client = "100"
        If AxSAPBAPIControl1.Connection.Logon(0, False) Then
            MsgBox(AxSAPBAPIControl1.Connection.IsConnected)
        End If
    End Sub
End Class

最終的には次のようになります。

Eine Ausnahme (erste Chance) des Typs "System.AccessViolationException" は、mscorlib.dll aufgetreten にあります。in .Client = "100"

VB6 は動作します。

接続オブジェクトをVB.NETの他のクラスに転送する方法を知っている人はいますか?

助けてくれてありがとう。

4

1 に答える 1

-1

推測では:あなたは古いVB6コードでSetを使用しています.VBAのオブジェクト、linkeに影響すると思います。あなたは次のようなものを試すかもしれません

AxSAPBAPIControl1 =  AxSAPBAPIControl1.Connection = AxSAPLogonControl1.NewConnection()

AxSAPBAPIControl1 は接続オブジェクトを提供し、それ自体を変更しないと思います。そのため、使用されない新しい接続を開き、「接続されていない」AxSAPBAPIControl1 が使用されます。私は SAP-Com を知りませんが、msoffice.interop でこの種のクラッドが時々発生しています。フィードバックをお願いします。

于 2012-10-12T10:54:48.747 に答える