SAP com VB6 VB.NET Diferença de comportamento

Estou a ligar-me à SAP através da COM, usando comandos ActiveX arrastados para a forma. Em VB6 eu escrevo:

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

em VB.NET 2010 I write:

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

e acabar com:

Eine Ausnahme (erste Chance) des Typs "System.AccessViolationException " ist in mscorlib.dll aufgetreten. em .Cliente = " 100 "

O VB6 funciona.

Alguém tem uma ideia de como transferir o objecto de ligação para a outra classe em VB.NET

Obrigado. pela ajuda.

Author: Johannes Maria Frank, 2012-10-11

2 answers

Um palpite.: Você está usando o Set em código VB6 antigo, eu acho que isso afeta objetos, linke em VBA. Você pode tentar algo como
AxSAPBAPIControl1 =  AxSAPBAPIControl1.Connection = AxSAPLogonControl1.NewConnection()

Eu acho que AxSAPBAPIControl1 lhe dá um objeto de conexão e não se modifica a si mesmo - então você está abrindo uma nova conexão, que nunca é usada, e então o AxSAPBAPIControl1 "desconectado" é usado. Não conheço SAP-Com, mas este tipo de krad está a acontecer em msoffice.interop acontece às vezes. Por favor, dê-me algum feedback.

 -1
Author: Christian Sauer, 2012-10-12 10:54:48

Em vez de VB.NET 2010 tente com C# e deixe-nos saber se você ainda tem o mesmo problema. quando vou tentar usar vb.net para a baixa comunicação, o meu programa caiu, em seguida, mudou algumas partes do código para dll em C# e tudo funcionou.

Antes de criar um dll, deve tentar traduzir o exemplo publicado para C# e depois ver se foi corrigido {[[2]} Saúde.

 -3
Author: Carlos Cocom, 2012-10-11 23:07:34