Dclare Function

giovedì 03 agosto 2006 - 17.11

secks Profilo | Senior Member

Devo utilizzare una libreria di terzi (Pippo.DLL) con le sue funzioni ( es. vbUno e vbDue ).

Secondo le istruzioni ho attivato i seguenti comandi:

Declare Function VbUno Lib "Pippo.dll" (ByVal textcmd As String, ByVal lpdwSysError As Integer) As Integer
Declare Function VbDue Lib "Pippo.dll" (ByVal textcmd As String, ByVal lpdwSysError As Integer) As Integer

ma utilizzando le funzioni da il seguente errore:

"Riferimento a un oggetto non impostato su un'istanza di oggetto."

In vb6 funziona, ma non so come attivare il riferimento all'oggetto in VB.NET.

Qualcuno sa come fare?

Ciao a tutti e grazie.
Paolo.

19018 Profilo | Expert

Hai aggiunto un riferimento a quella libreria tramite il menu Progetto->Aggiungi Riferimento ?

Stefano Passatordi

http://blogs.dotnethell.it/stem/

secks Profilo | Senior Member

Il riferimento non permette di inserirlo: Impossibile ...
Comunque una delle funzioni legate alla libreria funziona, ma non riesco a capire perchè se attivo le altre quando le richiamo da l'errore: "Riferimento a un oggetto non impostato su un'istanza di oggetto."

19018 Profilo | Expert

Posta tutto il codice qui e vediamo.

Stefano Passatordi

http://blogs.dotnethell.it/stem/

secks Profilo | Senior Member

Per ragioni di riservatezza in quanto non sono proprietario della libreria in oggetto chiamerò Pippo.DLL l'oggetto in questione.
In linea di massima il programma è scritto come segue.
La funzione vbOpen e vbClose funzionano.
La funzione vbWrite ritorna il seguente errore "Riferimento a un oggetto non impostato su un'istanza di oggetto."
All'inizio anche le altre funzioni mi davano il suddetto errore.
Ho inviato il programma di prova al proprietario della libreria con le funzioni vbOpen e vbClose.
Dopo un po' mi ha ritornato il programma con sorgente funzionanate con la sola differenza che al posto delle dichiarazioni Long sulle variabili era stato posto l'integer.
Ho provato ad attivare la funzione vbWrite con le suddette considerazioni ma da il vecchio errore.
Ho provato a riportare su nuovo progetto il sorgente speditomi e l'errore mi si ripete su tutte le funzioni.

A questo punto ho pensato che dopo il DECLARE sia necessario attivare qualcos'altro per fare in modo che l'oggetto della funzione sia riconosciuto, ma non so cosa.


Option Strict Off
Option Explicit On

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Codice generato da Progettazione Windows Form "

Public Sub New()
MyBase.New()

'Chiamata richiesta da Progettazione Windows Form.
InitializeComponent()

'Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent()

End Sub

'Form esegue l'override del metodo Dispose per pulire l'elenco dei componenti.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Richiesto da Progettazione Windows Form
Private components As System.ComponentModel.IContainer

'NOTA: la procedura che segue è richiesta da Progettazione Windows Form.
'Può essere modificata in Progettazione Windows Form.
'Non modificarla nell'editor del codice.
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(64, 32)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(120, 48)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

' Declare Function for Open Communication Port
Declare Function VbOpen Lib "Pippo.dll" (ByVal intCom As Integer, ByVal dwBaudRate As Integer, ByVal byParity As Byte, ByVal byDataBit As Byte, ByVal byStopBit As Byte, ByVal byFlowControl As Byte, ByVal lpdwSysError As Integer) As Integer
' Declare Function for Write Command on Communication Port
Declare Function VbWrite Lib "Pippo.dll" (ByVal textcmd As String, ByVal lpdwSysError As Integer) As Integer
' Declare Function for Read from Communication Port
Declare Function VbClose Lib "Pippo.dll" (ByVal lpdwSysError As Integer) As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim vRet As Integer = 0
Dim vRetErr As Integer = 0
Dim bRate As Integer = 19200
Dim bPort As Integer = 1 'Com Port
Dim bData As Byte = 7
Dim bParity As Byte = 1
Dim bStop As Byte = 0
Dim bFlow As Byte = 1

Dim s As String = ""

Try

vRet = VbOpen(bPort, bRate, bParity, bData, bStop, bFlow, vRetErr)

If (vRet <> 0) Then
MsgBox("Error on Init Communication", (vbOKOnly + vbCritical), "Communication Error")
Exit Sub
End If
vRet = VbClose(vRetErr)

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

End Class

19018 Profilo | Expert

Quando inserisci il codice ricorda di inserirlo tra gli appositi tag così è più leggibile. Comunque...ti da errore nella dichiarazione della funzione non quando cerchi di usarla?Nel codice trovo solo la sua dichiarazione.

Stefano Passatordi

http://blogs.dotnethell.it/stem/

secks Profilo | Senior Member


Mi da errore quando tra vbOpen e vbClose effettuo il seguente comando, perciò quando richiamo la funzione.

vRet = VbWrite(s, vRetErr)

tipo


Try
' Open Communication on Com Port
vRet = VbCEFOpen(bPort, bRate, bParity, bData, bStop, bFlow, vRetErr)

If (vRet <> 0) Then
MsgBox("Error on Init Communication", (vbOKOnly + vbCritical), "Communication Error")
Exit Sub
End If

If False Then
s = "30161"
Else
s = "30160"
End If
vRet = VbWrite(s, vRetErr) 'ERRORE ????????????????????????



' Close Communication on Com Port
vRet = VbClose(vRetErr)


Catch ex As Exception
MsgBox(ex.Message)
End Try

19018 Profilo | Expert

Non so che dirti, apparentemente è tutto ok. Devi chiedere al proprietario della libreria come utilizzare quella funzione, a guardare così il codice sembra tutto ok. L'unico probelma può derivare dagli argomenti ma sono tutti e due inizializzati.Prova a passare come argomenti non variabili ma direttamente due valori ("prova",1) e vedi se ti da lo stesso errore.Molto probabilmente si e ciò significa che dipende dalla funzione e non da altri elementi nel codice.

Stefano Passatordi

http://blogs.dotnethell.it/stem/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5