Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Richiamo Funzione vb 2008 da acucobol
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
rickyrey
Mortale devoto
Mortale devoto


Registrato: 08/02/10 15:32
Messaggi: 5
Residenza: pavia

MessaggioInviato: 08 Feb 2010 15:36    Oggetto: Richiamo Funzione vb 2008 da acucobol Rispondi citando

Buongiorno a tutti.
Ho un progetto vb 2008 per una dll, all'interno della quale ? contenuta una
funzione, esposta come pubblica.
Richiamo la funzione da un programma cobol, passandole i dovuti parametri e
fin qui tutto funziona bene; la funzione mette a video un form con alcuni
campi di input (fra gli altri). L'utente compila i campi di input e alla
fine, per mezzo della pressione di un tasto (es. invio), l'input compilato
dovrebbe tornare al programma cobol. Il problema si presenta perche' pare
che, fino alla chiusura del form (o meglio, del richiamo alla dll), il
controllo non torni a cobol. In concreto avrei bisogno di qualche metodo che
mi permetta di restituire la stringa di ritorno della funzione al programma
cobol, senza chiudere il form a video, in modo che poi il programma cobol
possa inviarmi una successiva richiesta di un altro form, che dovrebbe
sostituire quello gi? a video. Tutto questo dovrebbe avvenire, credo, senza
chiudere l'istanza attiva della dll (non per mie esigenze particolari ma
perche' non mi viene in mente un altro modo per lasciare a video il form
finche' non viene caricato quello successivo).
Grazie per l'aiuto

Ps.
Utilizzo l'istruzione "modify" in acu cobol x visualizzare la maschera vb il problema e' che fino a che non si chiude la maschera il "focus" non ritorna a cobol e rimane in attesa all'interno dell'istruzione modify..... esiste un modo per non rendere questa istruzione "SOSPENSIVA" ????

Riccardo
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 13 Feb 2010 19:43    Oggetto: Rispondi citando

Puoi postare un po' di codice?
Top
Profilo Invia messaggio privato
rickyrey
Mortale devoto
Mortale devoto


Registrato: 08/02/10 15:32
Messaggi: 5
Residenza: pavia

MessaggioInviato: 15 Feb 2010 15:34    Oggetto: Rispondi citando

Da parte cobol o Vb........
dimmi di cosa hai bisogno.......
se vuoi posso anche inviarti una mail con allegato tutto quello che possa servirti....
Aiutami sono nella "cacca"........hehehheh........
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 17 Feb 2010 20:01    Oggetto: Rispondi citando

Secondo me possiamo iniziare dal codice della funzione in vb.
Dato che il problema è che la funzione fatica a spedire i dati a cobol penso che dovremmo iniziare a guardare il codice che viene eseguito allo scattare dell'evento che usi per inviare i dati.
Top
Profilo Invia messaggio privato
rickyrey
Mortale devoto
Mortale devoto


Registrato: 08/02/10 15:32
Messaggi: 5
Residenza: pavia

MessaggioInviato: 18 Feb 2010 14:45    Oggetto: Richiamo Funzione vb 2008 da acucobol Rispondi citando

come faccio ad inviarti il progetto in vb ?
come allego il file zip ?

Ti ringrazio di cuore....... sto impazzendo..........
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 18 Feb 2010 21:08    Oggetto: Rispondi citando

Posta pure qui il segmento di codice vb che si occupa di mandare i dati a cobol.
Magari metti pure qualche commento così mi raccapezzo.
Non serve a nulla mandarmi l'intero progetto perchè:
1) non ho macchine su cui farlo girare
2) vb è un po' che non lo seguo ma dovrei essere ancora in grado se non altro di leggerlo; dato che non lo uso nè per lavoro nè per altro, si ricade nel punto 1.
Top
Profilo Invia messaggio privato
rickyrey
Mortale devoto
Mortale devoto


Registrato: 08/02/10 15:32
Messaggi: 5
Residenza: pavia

MessaggioInviato: 19 Feb 2010 10:28    Oggetto: Cobol e vb2008 Rispondi citando

Prima Parte : Maschera.vb

Codice:
Imports System.Windows.Forms
Imports MySql.Data.MySqlClient
Imports System.Drawing
Imports System.Runtime.InteropServices

Public Class Maschera

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

Private Declare Function SetForegroundWindow Lib "user32" (ByVal handle As IntPtr) As Integer

Dim WithEvents campoI As TextBox
Dim WithEvents MascheraForm As Form
Dim TabellaMaschera As DataTable
Dim TabellaCampi As DataTable
Dim campo As Object
Public inputStringa As String
Dim segnaStringa As Integer = 1     'Numero di caratteri già letti nella stringa di input
Dim uscita As Boolean = False       'Flag che indica se sto ancora aspettando un input dall'utente
Dim record As System.Data.DataRow
Dim strRitorno As String = ""
Dim connessione As MySqlConnection
Dim funzione As String = ""
Dim nomeMascheraOld As String = ""
Dim pidPadre As Integer

Private Sub connessioneDb(ByVal nomeMask As String)
' Eseguo tutte le operazioni sul database in un blocco
' Try...Catch per intercettare eventuali errori e mostrarli
Try
    If connessione Is Nothing Then
        connessione = New MySqlConnection(My.Settings.fdpConnectionString.ToString)
        connessione.Open()
    End If

    ' Creo un adattatore dati passandogli la query (dati della maschera)
    Dim AdattatoreMaschera As New MySqlDataAdapter("SELECT * FROM testmaschera1 WHERE nmask='" & nomeMask & "'", connessione)
    ' Creo un adattatore dati passandogli la query (dati dei campi)
    Dim AdattatoreCampi As New MySqlDataAdapter("SELECT * FROM testmaschera2 WHERE nmask2='" & nomeMask & "'", connessione)

    ' Creo una tabella dati (della maschera)
    TabellaMaschera = New DataTable
    ' Creo una tabella dati (dei campi)
    TabellaCampi = New DataTable

    ' Dico all'adattatore di riempire la tabella dati (della maschera)
    AdattatoreMaschera.Fill(TabellaMaschera)
    ' Dico all'adattatore di riempire la tabella dati (dei campi)
    AdattatoreCampi.Fill(TabellaCampi)

    ' Libero le risorse

    AdattatoreMaschera.Dispose()
    AdattatoreCampi.Dispose()

Catch ex As Exception ' Si è verificato un errore
    strRitorno = "Attenzione! Si è verificata un'eccezione: " & _
                    vbCrLf & vbCrLf & ex.ToString
    ritorno()
    Exit Sub
End Try

End Sub

Public Function genMap(ByVal pidPad As Integer, ByVal nomeMaschera As String, ByVal inputStringaEsterna As String) As String

pidPadre = pidPad
If MascheraForm Is Nothing Then
    Dim miaMask As New Maschera
Else
    If nomeMaschera = nomeMascheraOld Then
        MascheraForm.Dispose()
        MascheraForm = New Form
    Else
        Dim ff As New FormFreezer(MascheraForm, True)
        For i = 0 To (MascheraForm.Controls.Count - 1)
            MascheraForm.Controls.RemoveAt(0)
        Next
        ff.Unfreeze()
    End If

    nomeMascheraOld = nomeMaschera
End If

If nomeMaschera = "F3" And inputStringaEsterna = "F3" Then
    connessione.Dispose()
    'MascheraForm.Close()
    uscita = True
End If
inputStringa = inputStringaEsterna
uscita = False  'In attesa di input da parte dell'utente

'Connessione al db con lettura dati della maschera e dei campi
connessioneDb(nomeMaschera)

'Imposto le proprietà della maschera
record = TabellaMaschera.Rows(0)
creaMaschera()

'Creo i campi e ne imposto le proprietà
For i As Integer = 0 To TabellaCampi.Rows.Count - 1
    record = TabellaCampi.Rows(i)
    Select Case record("TipoCampo")
        Case "I"    'Campi input
            campo = New TextBox
            campo.autosize = False
            campo.maxlength = record("Maxchar")
            creaCampo()
            campo.Text = Mid$(inputStringa, segnaStringa, CInt(record("Maxchar").ToString))
            segnaStringa += CInt(record("Maxchar").ToString)
            campo.bringtofront()
        Case "O"    'Campi output
            campo = New Label
            campo.autosize = False
            creaCampo()
            campo.Text = Mid$(inputStringa, segnaStringa, CInt(record("Maxchar").ToString))
            segnaStringa += CInt(record("Maxchar").ToString)
            campo.bringtofront()
        Case "T"    'Campi fissi
            campo = New Label
            campo.autosize = False
            creaCampo()
            campo.text = record("TestoFisso").ToString
            campo.bringtofront()
        Case "B"    'Campi bottone
            campo = New Button
            campo.autosize = False
            creaCampo()
            campo.bringtofront()
        Case "S"    'Campi disegno
            campo = New Label
            campo.autosize = False
            creaCampo()
            campo.sendtoback()
    End Select
Next

MascheraForm.ShowInTaskbar = True
If Not MascheraForm.Visible Then
    MascheraForm.ShowDialog()
End If

Do While strRitorno = ""
    Threading.Thread.Sleep(1000)
Loop
Try
    Debug.Print(strRitorno)
    Return strRitorno
Catch ex As Exception
Finally

End Try
'Return ritorno()
Return strRitorno
Debug.Print(strRitorno)
'Call ritorno()

Do While Not uscita
    Threading.Thread.Sleep(1000)
Loop

End Function

'Private Sub videoMap()

'MascheraForm.ShowDialog()
''MascheraForm.Show()
''Verificare se va bene showdialog

'End Sub

Public Sub New()

'MsgBox("Creata nuova maschera")
MascheraForm = New Form

End Sub

Private Sub creaMaschera()
'Routine per la creazione della maschera e l'impostazione delle sue proprietà

With MascheraForm
    .KeyPreview = True
    .MaximizeBox = False
    .MinimizeBox = False
    .ShowInTaskbar = False
    .Height = CInt(record.Item("Lunghezza").ToString)
    .Width = CInt(record.Item("AltezzaF").ToString)
    .Top = CInt(record.Item("PosizioneFY").ToString)
    .Left = CInt(record.Item("PosizioneFX").ToString)
    .BackColor = creaColore(CInt(record.Item("Sfondo").ToString))
End With

End Sub

Private Sub creaCampo()
'Routine per la creazione dei campi di input

'Associo il campo al form da visualizzare
campo.Parent = MascheraForm

'Imposto posizione e dimensioni del campo
campo.Left = record("POSX")
campo.Top = record("POSY")
campo.Height = record("ALTEZZA")
campo.Width = record("LUNGHEZZA")

'Definisco il font del campo
Dim nomeFont As String = ""
Select Case record("TIPOFONT")
    Case 0
        nomeFont = "Arial"
    Case 1
        nomeFont = "Book Antiqua"
    Case 2
        nomeFont = "Comic Sans MS"
    Case 3
        nomeFont = "Courier"
    Case 4
        nomeFont = "Courier New"
    Case 5
        nomeFont = "Lucida Console"
    Case 6
        nomeFont = "MS Sans Serif"
    Case 7
        nomeFont = "System"
    Case 8
        nomeFont = "Tahoma"
    Case 9
        nomeFont = "Terminal"
    Case 10
        nomeFont = "Times New Roman"
    Case 11
        nomeFont = "Verdana"
End Select
campo.Font = New System.Drawing.Font(nomeFont, CSng(record("DIMENSIONEFONT")))
campo.ForeColor = creaColore(CInt(record("COLORFONT")))
campo.BackColor = creaColore(CInt(record("COLORSFONDO")))
With campo
    Select Case Trim$(UCase$(record("STYLEFONT").ToString))
        Case ""

        Case "B"
            .Font = New Font(nomeFont, campo.font.size, FontStyle.Bold)
        Case "I"
            .Font = New Font(nomeFont, campo.font.size, FontStyle.Italic)
        Case "S"
            .Font = New Font(nomeFont, campo.font.size, FontStyle.Underline)
        Case "BI"
            .Font = New Font(nomeFont, campo.font.size, FontStyle.Bold Or FontStyle.Italic)
        Case "BS"
            .Font = New Font(nomeFont, campo.font.size, FontStyle.Bold Or FontStyle.Underline)
        Case "IS"
            .Font = New Font(nomeFont, campo.font.size, FontStyle.Italic Or FontStyle.Underline)
        Case "BIS"
            .Font = New Font(nomeFont, campo.font.size, FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline)
    End Select
End With
    '...............
End Sub

Private Sub Intercetta_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MascheraForm.KeyDown

Select Case e.KeyData
    Case Keys.F1, Keys.Enter
        funzione = "$F01$"
    Case Keys.F3
        funzione = "$F03$"
    Case Else
        'If sender.
        Exit Sub
End Select

MascheraForm.DialogResult = DialogResult.OK
e.SuppressKeyPress = True
e.Handled = True

End Sub

Private Sub Intercetta_DialogResultChange(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MascheraForm.FormClosing

Call ritorno()
If strRitorno = "$F01$123" Then
    'ATTENZIONE Stringa usata come test per uscire dal programma
    e.Cancel = False    'Chiudo la maschera
    'Call attesa()
Else
    e.Cancel = True     'Tengo aperta la maschera
    'Call attesa()
End If
'e.Cancel = True 'Imposto a true per lasciare aperta la maschera, con false la chiudo
'e.Cancel = False

End Sub

Private Sub attesa()
    Do While True
        Threading.Thread.Sleep(500)
    Loop
End Sub

Private Sub ritorno()
'Restituisce tutto l'input presente sulla maschera a video
Dim stringa As String = funzione

For Each campo As Windows.Forms.Control In MascheraForm.Controls
    If TypeOf (campo) Is Windows.Forms.TextBox Then
        stringa += campo.Text
    End If
Next

strRitorno = stringa
Debug.Print(strRitorno)
Debug.WriteLine(MascheraForm.Visible)

'Dim processo As New Process
'processo = Process.GetProcessById(pidPadre, My.Computer.Name)
'processo.StartInfo.FileName = processo.ProcessName
'processo.StartInfo.UseShellExecute = False
'Process.Start(processo.StartInfo)
'My.Computer.Keyboard.SendKeys(strRitorno, True)

End Sub

'Public Property outputStringa(ByVal nomeMaschera As String, ByVal inputStringaEsterna As String) As String
'    Get
'        genMap(nomeMaschera, inputStringaEsterna)
'        outputStringa = ritorno()
'    End Get

'    Set(ByVal value As String, ByVal nomeMaschera, ByVal inputStringaEsterna)
'        genMap(nomeMaschera, inputStringaEsterna)
'        'outputStringa = ritorno(nomeMaschera, inputStringaEsterna)
'    End Set

'End Property

End Class
===============================================

Seconda Parte Main.vb :

Imports MaskLibrary.Maschera
Imports System.Windows.Forms
Imports System.Drawing

Module Main

''' <summary>
''' Restituisce il colore associato al codice colore scelto
''' </summary>
''' <param name="codColore"></param>
''' <returns></returns>
''' <remarks></remarks>
Function creaColore(ByVal codColore As Integer) As System.Drawing.Color

Select Case codColore
    Case 1
        Return System.Drawing.Color.FromArgb(99, 35, 31)
    Case 2
        Return System.Drawing.Color.FromArgb(165, 15, 15)
    Case 3
        Return System.Drawing.Color.FromArgb(249, 187, 19)
    Case 4
        Return System.Drawing.Color.FromArgb(255, 231, 69)
    Case 5
        Return System.Drawing.Color.FromArgb(4, 152, 19)
    Case 6
        Return System.Drawing.Color.FromArgb(101, 196, 253)
    Case 7
        Return System.Drawing.Color.FromArgb(2, 33, 160)
    Case 8
        Return System.Drawing.Color.FromArgb(72, 0, 168)
    Case 9
        Return System.Drawing.Color.FromArgb(0, 0, 0)
    Case 10
        Return System.Drawing.Color.FromArgb(150, 150, 150)
    Case 11
        Return System.Drawing.Color.FromArgb(192, 192, 192)
    Case 12
        Return System.Drawing.Color.FromArgb(255, 255, 255)
    Case 13
        Return System.Drawing.Color.FromArgb(243, 217, 243)
    Case 14
        Return System.Drawing.Color.FromArgb(255, 225, 161)
    Case 15
        Return System.Drawing.Color.FromArgb(241, 238, 207)
    Case 16
        Return System.Drawing.Color.FromArgb(199, 255, 215)
    Case 17
        Return System.Drawing.Color.FromArgb(199, 234, 255)
    Case 18
        Return System.Drawing.Color.FromArgb(213, 194, 254)
End Select

End Function 'creaColore

''' <summary>
    ''' Scrive nel campo di competenza il tasto digitato dall'utente,
    ''' opportunamente trattato
    ''' </summary>
    ''' <param name="campo"></param>
    ''' <param name="tasto"></param>
    ''' <param name="posizione"></param>
    ''' <param name="svuota"></param>
    ''' <remarks></remarks>
Sub scriviCampi(ByVal campo As TextBox, ByVal tasto As Char, ByVal posizione As Integer, ByVal svuota As Boolean)
        If (Not campo Is Nothing) Then
            If svuota Then campo.Text = String.Empty
            campo.Text = Mid(campo.Text, 1, posizione - 1) & tasto & Mid(campo.Text, posizione)
            campo.Text = Mid(campo.Text, 1, campo.MaxLength)
            campo.Focus()
            campo.SelectionStart = posizione
        End If

    End Sub 'scriviCampi

End Module

Public Class FormFreezer
   Implements IDisposable

   ' The form being frozen
   Dim Form As Form
   ' the auxiliary PictureBox that will cover the form
   Dim PictureBox As PictureBox
   ' the number of times the Freeze method has been called
   Dim FreezeCount As Integer = 0

   ' create an instance associated with a given form
   ' and optionally freeze the form right away
   Public Sub New(ByVal form As Form, Optional ByVal freezeIt As Boolean = False)
      Me.Form = form
      If freezeIt Then Me.Freeze()
   End Sub

   ' freeze the form
   Public Sub Freeze()
      ' Remember we have frozen the form once more
      FreezeCount += 1
      ' Do nothing if it was already frozen
      If FreezeCount > 1 Then Exit Sub

      ' Create a PictureBox that resizes with its contents
      PictureBox = New PictureBox()
      PictureBox.SizeMode = PictureBoxSizeMode.AutoSize
      ' create a bitmap as large as the form's client area and with same color depth
      Dim frmGraphics As Graphics = Form.CreateGraphics()
      Dim rect As Rectangle = Form.ClientRectangle
      PictureBox.Image = New Bitmap(rect.Width, rect.Height, frmGraphics)
      frmGraphics.Dispose()

      ' copy the screen contents, from the form's client area to the hidden bitmap
      Dim picGraphics As Graphics = Graphics.FromImage(PictureBox.Image)
      picGraphics.CopyFromScreen(Form.PointToScreen(New Point(rect.Left, rect.Top)), New Point(0, 0), New Size(rect.Width, rect.Height))
      picGraphics.Dispose()

      ' Display the bitmap in the picture box, and show the picture box in front of all other controls
      Form.Controls.Add(PictureBox)
      PictureBox.BringToFront()
   End Sub

   ' unfreeze the form
   ' Note: calls to Freeze and Unfreeze must be balanced, unless force=true
   Public Sub Unfreeze(Optional ByVal force As Boolean = False)
      ' exit if nothing to unfreeze
      If FreezeCount = 0 Then Exit Sub
      ' remember we've unfrozen the form, but exit if it is still frozen
      FreezeCount -= 1
      ' force the unfreeze if so required
      If force Then FreezeCount = 0
      If FreezeCount > 0 Then Exit Sub

      ' remove the picture box control and clean up
      Form.Controls.Remove(PictureBox)
      PictureBox.Dispose()
      PictureBox = Nothing
   End Sub

   ' return true if the form is currently frozen
   Public ReadOnly Property IsFrozen() As Boolean
      Get
         Return FreezeCount > 0
      End Get
   End Property

   ' ensure that resources are cleaned up correctly
   Public Overridable Sub Dispose() Implements IDisposable.Dispose
      Me.Unfreeze(True)
   End Sub
End Class

===============================================
Ti ringrazio di Cuore..........
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 24 Feb 2010 21:42    Oggetto: Rispondi citando

Scusa, rinfrescami un po' la memoria...
Del codice che hai scritto, qual'è la funzione che chiami da cobol?

Il punto è che se la funzione che viene chiamata è quella che genera la maschera, finchè questa non si chiude il controllo non ritorna a questa e quindi il ritorno va a farsi benedire.

Bisognerebbe riuscire ad implementare un meccanismo di questo tipo:
Codice:

1) cobol chiama la funzione della dll
2) la funzione viene eseguita in un thread (detto [1]) e la maschera vera e propria viene gestita in un altro thread detto [2]
3) il thread [1] ascolta il [2] e quando premi invio esegue il ritorno

In pratica bisogna scorporare il processo "maschera" da quello della funzione chiamata nella dll in modo da avere la maschera libera di farsi i suoi; finchè non si preme invio [1] deve stare in un loop a far nulla.

Devo pensarci però ancora un po' anche perchè non è sia la classica cosa da fare dopo cena...

Oppure, sei costretto ad usare questo approccio?
Non è possibile far sì che la maschera venga generata e poi sia lei a spedire a cobol la roba? (e non cobol che aspetti il ritorno).

Io cobol non lo conosco tranne che per fama (x me negativa) quindi cosa possa fare non lo so di preciso.

Se cobol può esporre dei servizi o roba simile potresti ragionare come appena sopra: in pratica la maschera sarebbe come un programmino a parte che si preoccupa di inviare le cose all'altro programma.
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 24 Feb 2010 22:07    Oggetto: Rispondi citando

Altra idea anche se:
1) acucobol deve poter gestire i socket
2) la portabilità della dll va un po' a ramengo

1) Cobol chiama la dll che genera la form e apre un socket
2) la form quando premi invio scrive nel socket
3) cobol si legge le cose, fa quello che deve e poi si rimette in ascolto del socket
4) magari ci si inventa qualche cosa per tener sincro le cose, ossia evitare di avere il socket chiuso ma la maschera aperta.

Che dici?
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 25 Feb 2010 01:32    Oggetto: Rispondi citando

Un amico che ha lavorato con acucobol e ora con vb non è molto convinto che la cosa funzioni...
Domanda: ma perchè passi per una dll in vb? La maschera non la puoi creare con cobol?
Top
Profilo Invia messaggio privato
rickyrey
Mortale devoto
Mortale devoto


Registrato: 08/02/10 15:32
Messaggi: 5
Residenza: pavia

MessaggioInviato: 25 Feb 2010 12:17    Oggetto: Richiamo Funzione vb 2008 da acucobol Rispondi

Purtroppo abbiamo vincoli specifici, quindi siamo costretti ad usare sia cobol che vb; mi attira la soluzione dei 2 thread, mentre la socket la escluderei a priori (soluzione già provata in precedenza con esiti disastrosi).
Non mi è però molto chiara la domanda che poni:
Citazione:
Non è possibile far sì che la maschera venga generata e poi sia lei a spedire a cobol la roba? (e non cobol che aspetti il ritorno).

In che senso? Di fatto è proprio così: cobol chiama la funzione vb che mette a video la maschera e rimane in attesa dell'input digitato dall'utente;solo quando l'utente ha finito di inserire l'input, la funzione vb costruisce la stringa di risposta e la invia a cobol. Certo, nell'ottica dei due thread separati probabilmente dovrebbero essere due oggetti separati a generare la maschera e restituire l'input acquisito, ma si tratterebbe pur sempre di oggetti vb, cobol non farebbe altro che restare in attesa (in questa fase) della stringa di ritorno. Il problema sorge(va) nel momento in cui la maschera deve restare a video dopo aver rispedito la stringa di "risposta".
Qualche suggerimento su come implementare le due parti (cobol e vb) in modo che si parlino correttamente?
Grazie
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi