| 
                
                
                 
 
	
		| Precedente :: Successivo |  
		| Autore | Messaggio |  
		| rickyrey Mortale devoto
 
  
 
 Registrato: 08/02/10 15:32
 Messaggi: 5
 Residenza: pavia
 
 | 
			
				|  Inviato: 08 Feb 2010 15:36    Oggetto: Richiamo Funzione vb 2008 da acucobol |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 13 Feb 2010 19:43    Oggetto: |   |  
				| 
 |  
				| Puoi postare un po' di codice? |  |  
		| Top |  |  
		|  |  
		| rickyrey Mortale devoto
 
  
 
 Registrato: 08/02/10 15:32
 Messaggi: 5
 Residenza: pavia
 
 | 
			
				|  Inviato: 15 Feb 2010 15:34    Oggetto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 17 Feb 2010 20:01    Oggetto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| rickyrey Mortale devoto
 
  
 
 Registrato: 08/02/10 15:32
 Messaggi: 5
 Residenza: pavia
 
 | 
			
				|  Inviato: 18 Feb 2010 14:45    Oggetto: Richiamo Funzione vb 2008 da acucobol |   |  
				| 
 |  
				| come faccio ad inviarti il progetto in vb ? come allego il file zip ?
 
 Ti ringrazio di cuore....... sto impazzendo..........
 |  |  
		| Top |  |  
		|  |  
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 18 Feb 2010 21:08    Oggetto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| rickyrey Mortale devoto
 
  
 
 Registrato: 08/02/10 15:32
 Messaggi: 5
 Residenza: pavia
 
 | 
			
				|  Inviato: 19 Feb 2010 10:28    Oggetto: Cobol e vb2008 |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 24 Feb 2010 21:42    Oggetto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 24 Feb 2010 22:07    Oggetto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 25 Feb 2010 01:32    Oggetto: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| rickyrey Mortale devoto
 
  
 
 Registrato: 08/02/10 15:32
 Messaggi: 5
 Residenza: pavia
 
 | 
			
				|  Inviato: 25 Feb 2010 12:17    Oggetto: Richiamo Funzione vb 2008 da acucobol |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		|  |  
  
	| 
 
 | 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
 
 |  
 
 |