vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Aufruf einer PL/1-DLL VB.net <->VB6 
Autor: Smaugy
Datum: 03.01.15 14:03

Hallo,

ich habe ein Problem an dem ich nich weiter weiß.
Ich setzte gerade ein VB6 Programm auf vb.net um. In diesem Programm wird eine Funktion in einer PL/1 - DLL aufgerufen. Übergeben werden die Paramter in einer Structure aus der hinterher auch die Ergebnisse gelesesen werden.
In VB 6 klappt das auch ohne Probleme, aber mit VB.nt (vb 2010) bekomme ich das nicht hin.
Der Aufruf selber klappt. Aber die übergebenen Werte passen nicht.
So werden die String in VB.Net mit Null terminiert. Die PL/1-erwartet aber Space als Füllzeichen und feste Längen.
Und auch bei den double Parametern ist irgendwie mind. ein Bit geschoben. Wenn ich mir die Parameter in PL/1 im Debugger anschaue scheinen die übergebenen Werte irgendwo zu lang zusein, z.B. wenn die Summen am Ende alle 0 sind bis auf Summe2 und Summe4. So ist in PL/1 die Summe3 und Summe5 gefüllt (und die anderen nicht) allerdings mit absurd hohen Werten.

Hier der Aufruf in VB.Net:

 
<DllImport("C:\Users\R\Documents\Projekte\dll\PL1k32.dll", _
  CallingConvention:=CallingConvention.StdCall, EntryPoint:="ABG")> Sub TB1( _
  ByRef Tar As MBBG_TYP, ByVal Msg As String, ByVal rkDebugInfo As String)
 
 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> Public _
   Structure MBBG_IN_TYP
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public WA As String        
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public ZW As String      
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public G1 As String 
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public Tf As String         
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public Tfk As String  
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public Gemxtra As _
          String 
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public Bg As String   
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public GV As String  
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public Zu As String   
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4)> Public KZO As String 
        Dim EA As Integer   
        Dim Gj As Integer                                                             
        Dim VD As Integer   
        Dim LD As Integer     
        Dim BD As Integer                                                           
        Dim KD As Integer                                                              
        Dim LZAV As Integer    
        Dim GS As Double                                                
        Dim Summe1 As Double                                           
        Dim Summe2 As Double                                                   
        Dim Summe3 As Double                                                  
        Dim Summe4 As Double     
        Dim Summe5 As Double                                                         
    End Structure
 
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> Public _
      Structure MBBG_OUT_TYP
        Dim NP As Double    
        Dim NPU As Double    
        Dim TB As Double      
        Dim RWB As Double
        Dim A2 As Integer
        Dim DMAV As Double 
        Dim ReturnCode As Integer                                  
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> Public FehlerID _
          As String     
    End Structure
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> Public _
      Structure MBBG_TYP
        Dim Inp As MBBG_IN_TYP
        Dim Out As MBBG_OUT_TYP
    End Structure
Und hier das selbe in VB6 (das was halt funktioniert)
Public Declare Sub TB1 Lib "C:\Users\R\Documents\Projekte\dll\PL1k32.dll" Alias _
  "ABG" (ByRef Tar As MBBG_TYP, ByVal Msg As String, ByVal rkDebugInfo As _
  String)
 
Public Type MBBG_IN_TYP
    WA As String * 4  
    ZW As String * 4   
    G1 As String * 4  
    Tf As String * 4                
    Tfk As String * 4   
    Gemxtra As String * 4   
    Bg As String * 4 
    GV As String * 4          
    Zu As String * 4      
    KZO As String * 4     
    EA As Long                
    Gj As Long   
    VD As Long    
    LD As Long
    BD As Long
    KD As Long  
    LZAV As Long          
    GS As Double  
    Summe1 As Double
    Summe2 As Double
    Summe3 As Double
    Summe4 As Double
    Summe5 As Double
End Type
Public Type MBBG_OUT_TYP
    NP As Double  
    NPU As Double   
    TB As Double    
    RWB As Double
    A2 As Long     
    DMAV As Double    
    ReturnCode As Long
    FehlerID As String * 8 
End Type
Public Type MBBG_TYP
        Inp As MBBG_IN_TYP
        Out As MBBG_OUT_TYP
End Type
Ich hoffe mir kann jemand einen Hinweis geben
Schonmal vielen Dank

Ralf
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Aufruf einer PL/1-DLL VB.net <->VB61.578Smaugy03.01.15 14:03
Re: Aufruf einer PL/1-DLL VB.net <->VB6949sv0001005.01.15 17:52
Re: Aufruf einer PL/1-DLL VB.net <->VB61.017Smaugy05.01.15 20:45
Re: Aufruf einer PL/1-DLL VB.net <->VB6923Smaugy05.01.15 21:20
Re: Aufruf einer PL/1-DLL VB.net <->VB6990Manfred X06.01.15 09:06

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel