Vai al contenuto
PLC Forum


Utilizzo Dll In Vba


Andry_78

Messaggi consigliati

Ciao a tutti,

premetto che non sono un programmatore.....

Sto cercando di utilizzare una DLL nel mio SCADA che supporta VBA, per interfacciarmi con una telecamera.

Alcune di queste funzioni le utilizzo tranquillamente (es: Connect, SendCommand...ecc.), mentre ce n'è una in particolare che mi da problemi (ReadCommand).

Questa funzione utilizza 4 parametri, tra cui uno di questi è uno "C String Pointer" (puntatore ad una stringa) che io non riesco a trattare in VBA.

Quando testo questa funzione, se passo questo valore come Valore mi si inchioda tutto, se lo passo come riferimento leggo un valore che però non so

come gestire in quanto dovrebbe essere un puntatore.

Vi posto il codice: In pratica la Funzine in questione è la "TSLAN_ReadCommand" e la variabile dove mi aspetto il valore dalla telecamera è "ipRec".

Declare Function TSLAN_Connect Lib "TSLAN" (ByVal iCH As Integer,ByVal IpIP As String,ByVal usPort As Integer) As Integer

Declare Function TSLAN_ReadCommand Lib "TSLAN" (ByVal iCH As Integer,ByVal IpSend As String,ByRef IpRecv As Byte,ByRef IpdwRdLen As Long) As Integer

Declare Function TSLAN_Release Lib "TSLAN" (ByVal iCH As Integer) As Integer

Sub main

Dim ch As Integer

Dim ip As String

Dim port As Long

Dim retVal1 As Integer

Dim retVal2 As Integer

Dim retVal3 As Integer

Dim ipS As String

Dim ipLen As Long

Dim ipRec As Byte

ch = 0

ip="192.168.0.199"

port = 257

ipS= "RSTS1"

retVal1 = TSLAN_Connect(ch,ip,port)

retVal2 = TSLAN_ReadCommand(ch,ipS,ipRec,ipLen)

retVal3 = TSLAN_Release(ch)

End Sub

Grazie a tutti in anticipo.

Ciao

Andrea.

Link al commento
Condividi su altri siti


In C le stringhe sono trattate come array di caratteri (e di conseguenza si utilizza un puntatore all'array stesso), quindi, nelle dichiarazioni in VB in genere occorre passare un dato stringa (ovviamente come riferimento, poichè è la funzione stessa che lo valorizzerà).

Però da quanto hai postato IpRecv è richiesto come byte, quindi non capisco....

Ma cosa ti deve rispondere la telecamera?

Ciao

Link al commento
Condividi su altri siti

Grazie per la risposta!

Quindi dovrei passargli una variabile di tipo stringa utilizzando il ByRef? Io l'ho impostata come byte perchè ho visto un'esempio di un applicatico scritto in c++ che utilizzava la stessa DLL, e veniva utilizzata una variabile di tipo CHAR:

"char text[256]"

Quindi io pensavo che il corrispettivo di CHAR in Visual Basic fosse il tipo BYTE.

La telecamera mi deve restituire una stringa contenente l'informazione che io gli ho richiesto in base al comando che gli ho inviato:

- per esempio lo stato della telecamera (0=STOP, 1=RUN) ecc....

Provo a passargli una Stringa come riferimento e ti faccio sapere.

Grazie ancora.

Ciao.

Link al commento
Condividi su altri siti

Ciao,

ho provato a passargli la stringa come riferimento ma mi va in "crash tutto".

L'unico modo per non farlo andare in crash è dichiararlo come byte, però poi quando eseguo lo script, mi ritrovo un numero che non mi dice nulla.

Hai qualche altro suggerimento?

Grazie.

Andrea.

Link al commento
Condividi su altri siti

Ma il declare della funzione TSLAN_ReadCommand è quello fornito dalla telecamera?

Che telecamera è e che software ti hanno fornito a corredo?

Ciao

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...