Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - VB nel C
Forum - C/C++ - VB nel C - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 11:53
Sabato, 03/05/2008
Va bene ... ma nel codice VB devi prevedere una dichiarazione di una funzione che sta nella DLL.
Poi dovrai richiamare questa funzione da VB passando quello che serve e ottenendo quello che vuoi.

Ad esempio, potrai dichiarare la funzione

Declare Function GetRecord Lib "TuaDLL.dll" () As Long

che esegua la funzione GetRecord all'interno della tua dll che restituisce un puntatore alla struttura letta.

Quel valore long, lo passerai alla CopyMemory per trasferire (come ti dicevo) i dati nella variabile strutturata del VB.

OPPURE, potrai dichiarare la funzione in questo modo

Declare Sub GetRecord Lib "TuaDLL.dll" (ByRef st As TipoStruttura)

e passare cosi' alla tua dll il puntatore all'area di memoria VB dove hai dichiarato la tua variabile strutturato cosi' che il codice C la riempia SENZA necessita' di CopyMemory.

Se hai problemi, inviami il progetto VB e C e ti suggerisco il codice ...

P.S. Ma perche' non fai tutto in VB? Oppure tutto in C?

Ultima modifica effettuata da gantonio il 03/05/2008 alle 11:54
PM Quote
Avatar
gismo (Normal User)
Rookie


Messaggi: 43
Iscritto: 07/01/2007

Segnala al moderatore
Postato alle 11:58
Sabato, 03/05/2008
ok grazie mille davvero..
beh è una cosa didattica..lo scopo è interfacciarsi col le dll quindi mi tocca..
grazie ancora..:k:

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 12:11
Sabato, 03/05/2008
Ah ... allora leggi questo

Utilizzare codice C/C++ con Visual Basic
http://www.visual-basic.it/articoli/agVB_VC.htm

... ti potra' essere utile ...

PM Quote
Avatar
gismo (Normal User)
Rookie


Messaggi: 43
Iscritto: 07/01/2007

Segnala al moderatore
Postato alle 12:20
Sabato, 03/05/2008
si lo stavo già leggendo..
per non ho ancora ben chiaro una cosa..
una volta passato il "puntatore" TYPE alla funzione..per accedere ai campi in c..
faccio TYPEVb->"campoVB" = "input"?
cioè campoVB deve coincidere col nome del campo del TYPE in Vb non a altro..?

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 12:33
Sabato, 03/05/2008
Il nome non ha importanza ... e' importante il tipo di dato che deve essere uguale ...

Un int per il C deve essere un Long per il VB



PM Quote
Avatar
gismo (Normal User)
Rookie


Messaggi: 43
Iscritto: 07/01/2007

Segnala al moderatore
Postato alle 12:53
Sabato, 03/05/2008
si..ma come faccio a memorizzare nel campo del TYPE (VB) i valori che voglio dalla funzione c?
es:
se io ho un TYPE con un campo "nome" passo alla funzione tutto il TYPE per riferimento..(per lo stesso discorso che mi hai detto te..)
ma poi dentro alla funzione C come accedo al campo nome per modificarlo?

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 13:10
Sabato, 03/05/2008
Te l'ho gia' detto ... devi passare la variabile strutturata ByRef in modo che alla funzione C arrivi il puntatore agli elementi ...


PM Quote
Avatar
gismo (Normal User)
Rookie


Messaggi: 43
Iscritto: 07/01/2007

Segnala al moderatore
Postato alle 14:21
Sabato, 03/05/2008
ok..ho fatto un pò di prove..però non mi funziona..
sicuramente sbaglio qualcosa..
ti posto il codice..dimmi se vedi l'errore..
per ovvi motivi ti posto solo i punti salienti..:)

Codice sorgente - presumibilmente C++

  1. //Codice DLL - c
  2.  
  3. //ministruttura di prova
  4. struct Test{
  5.         short int n;
  6. };
  7. ..
  8. //procedura da eseguire per il VB
  9. //dovrebbe scrivere nel campo TYPE del VisualBasic il numero 2
  10. void __stdcall prova(struct Test *Op){
  11.         Op->n = 2;
  12. }



Ora il codice nel VB:
Codice sorgente - presumibilmente VB.NET

  1. 'Dichiarazione funzione DLL
  2. Public Declare Sub prova Lib "testDll.dll" (ByRef struct As Test)
  3. 'struttura uguale a quella del C
  4. Type Test
  5.     numero As Integer
  6. End Type


all'evento click il valore 2 dovrebbe finire in una textbox con li seguente codice..
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Command1_Click()
  2. Dim struct As Test
  3. 'richiamo la procedura definita
  4. prova struct
  5. 'scrittura del numero della textbox
  6. Text1.Text = CStr(struct.numero)
  7. End Sub



al momento mi stampa solo 0 nelle textbox, sono abbastanza sicuro che il problema sia nel puntatore alla funzione C..anzi ne sono certo..
se ci capisci qualcosa sarebbe fantastico :k:

fammi sapere
grazie

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo