Newsgroup: it.comp.lang.visual-basic
Titolo: problema un pò complesso... speriamo nei guru....

Salve, ho un problema che spero di riuscire a spiegare nelle prossime righe:
stò facendo un programa in vb che deve richiamare una funzione da una dll
compilata in Visual C++ 6: la funzione è dichiarata nel modulo vb nel
seguente modo:
Declare Function VBAssSel Lib "c:\cserv\cservdll.dll" (ByVal cognome As
String, ByVal Nome As String, ByVal Nascita As String, ByRef Ritorno As
CStringa) As Integer
ora la parte del programma che dovrebbe richiamare la funzione l'ho scritta
così:
Dim Par1, par2, Par3 As String
Dim Lista As String
Dim RetVal As CStringa
Dim n As Integer
Dim I As Integer
For n = 0 To 19
  RetVal.stringa(n) = String(1000, " ")
Next
Par1 = cognome.Text
par2 = nomino.Text & "%"
Par3 = campo120.Text
n = VBAssSel(Par1, par2, Par3, RetVal)
però mi si blocca dandomi il messaggio di operazione non valida..... lo
stesso codice fatto in una maschera di access 2000 funziona riportandomi i
valori richiesti....quindi la dll funziona...
Qualcuno mi sa aiutare? penso sia un problema relativo a come richiamare le
funzioni nella dll in visual C++, però io conosco poco l'argomento.
Grazie per l'eventuale aiuto, Massimo

 
Ma ha bisogna di confontare questo con la dicherazione della funzione 
nel C. Approposito, é improbabile che il valore di ritorno é un Integer 
in VB, pui probabile che sia un Long, inoltre, le use dei strings é 
interessante.

 ha scritto nel messaggio
news:Gu_5b.26126$R32.8...@news2.tin.it...



Nel senso che stai usando un array.
In merito, non sono convintissimo che la cosa non dia problemi, data la
logica un "tantino" diversa di vb e c, ma dato che le mie conoscenze di c si
fermano ai (bei) tempi del turbo C, lascio la palla ai "veri guru"
ciao
ugo

Caro Max,
ma... dove è definita CStringa?
-- 
Ciao!
Ettore Massimo Albani
(leva ANTISPAMMER dall'indirizzo per inviare messaggi)|

 in che senso è interessante?
Solitamente se uno fa un DLL specifico per VB e altri ambiente COM lo 
fanno stilo "Active X" e non ha bisogna di questi dichierazione.
Quindi, supponiamo che sia un DLL "normale". In questi casi é pui tipico 
che lo DLL vuole (per argumenti string) puntatore ad un array di 
carettere terminato con un NULL, che solitamente viene simulato in VB 
con un byte array passato "ByRef". Tuttavia una programma C potrà anché 
leggere una stringa VB, ma in qualunché caso sara ancora pui probabile 
che verrà passato ByRef, quindi convertando mentre che lo passa ad una 
buffer locale.

Ciao Max anchio ho un problema con le dll scritte in VC++ e non trovo la
soluzione. Per la verità è il mio primo tentativo (che dura da una giornata
intera) di poter richiamare una funzione da una DLL.
Questo è il problema:
Vorrei scrivere una dll in VC++ 6 da poter usare in un programma VB6.
Per iniziare ho provato, con l'autocomposizione di VC++ 6, a creare una dll
per win32 che genera  una semplice funzione di esempio che ritorna un numero
intero, e tutto il codice di supporto.
Ho dichiarato ed richiamato la funzione da un programma VB6 ma continua a
darmi questo messaggio di errore:
" Impossibile trovare il punto di uingresso della Dll".
A te è capitato un caso simile o sai perchè possa capitare?
un grazie in aticipo
Maurizio

 ha scritto nel messaggio
news:CV06b.294086$lK4.9...@twister1.libero.it...

Guarda, a me la dll è stata data da un fornitore per permettere l'accesso ai
dati velocemente da access senza usare odbc; io faccio riconoscere la dll
dall'autoexec dei pc, poi ho creato un modulo in vb che richiama le funzioni
della dll e riesco a farla funzionare senza problema in access, mentre in vb
ho problemi che sembrano derivatii dal fatto che non riesca a riconoscere
l'array.....in access 2000 il vba la riconosce, mentre in vb6 no....