Newsgroup: it.comp.lang.visual-basic
Titolo: passaggio di char * a dll c

Salve a tutti,
    ho fatto una dll in c seguento l'articolo del sito comune 
(
http://www.it-lang-vb.net/Documentazione/Articoli/DllxVb.htm
). Con 
l'esempio dell'articolo non ho avuto problemi. Vorrei ora poter ricevere da 
vb un char * (che dovrebbe essere una string di vb) per una semplice 
funzione di questo tipo:
extern "C" __declspec (dllexport) int __stdcall provami(char *nome){
    printf("ciao %s",nome);
    system("pause"); //cosi' da poter vedere cio' che viene stampato
    return 0;
}
il codice vb che ho utilizzato e' il seguente:
Private Declare Function provami Lib "provadll.dll" Alias "_provami@4" 
(ByRef nome As String) As Long
Private Sub Command1_Click()
    Dim a As Long
    a = provami("denis")
End Sub
il risultato e' che non viene stampato nulla ma mi compare il messaggio del 
pause (premere un tasto per continuare). quindi la dll viene chiamata 
correttamente, ma il passaggio della stringa non funziona...
Avete gia' avuto esperienze tali? come risolvere?
Ciao e grazie
Dade

Ciao, ho avuto anche io lo stesso problema...
Non so se cosě risolvi, non ho provato...
comunque la stringa vb per C non č un char*, ma un BSTR (OLECHAR**)
Prova Cosě:
#define VB_CALL extern "C" __declspec(dllexport) __stdcall
 VB_CALL  long Funzione(LPSTR szStringa) {
     printf("ciao %s",szStringa);
     system("pause");
     return 0;
  }
Cmq, se cerchi bene su google, c'č un sacco di roba riguardante BSTR e
amenicoli vari ... Io c'ho cozzato qualche mese fa per fare una dll che
calcola la checksum md5 dei file...
-- 
Stay Cool, Stay Free, and then You will see.
It's Best to Stay Mellow!
http://www.assandshirt.com
Venerate anche voi il dio Flying Spaghetti Monster, andate su
http://www.venganza.org

 Avete gia' avuto esperienze tali? come risolvere?
Nella Declare devi dichiarare il parametro stringa ByVal e non ByRef: con ByVal
VB converte implicitamente la stringa (BSTR) in un char*.
Riferimenti utili:
http://msdn.microsoft.com/library/en-us/vbcon98/html/vbconconvertingcdeclarationstovisualbasic.asp
http://msdn.microsoft.com/library/en-us/dnw32dev/html/ora_apiprog6_topic1.asp
Bye
Raf

 calcola la checksum md5 dei file...
E le dichiarazioni sono come le hai passate a me?
Grazie 1000 del tuo aiuto
Ciao
Dade


"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:dh0ehp$d6v$1...@alix.livenet.it...

In effetti in quei documenti dice cosi'...
io ho trovato un tutorial dove dice il contrario... mah!
Cmq, visto che era semplice ho fatto le prove sia con byref che con byval ma 
non va...
da dentro la funzione c non riesco a leggere la stringa passata!
Ciao e grazie
Dade 

 ha scritto nel messaggio
news:4333c...@x-privat.org...

Cosa te lo fa pensare?
Ho compilato il tuo programmino ed effettivamente può sembrare così, ma il
problema è che la printf non stampa da nessuna parte, tant'è vero che non
compare nemmeno la stringa "ciao"...
Sostituisci la printf con una MessageBox, vedrai che funziona.
#include <windows.h>
...
 MessageBox(0, nome, "Stringa passata", 64);
Bye
Raf

 Raf
Si hai ragione Raf! In effetti mi era stato suggerito lo stesso su 
it.comp.programmare.win32! E' solo lo "strumento" di test errato (il printf) 
sostituendo con un MessageBox si puo' vedere che funziona.
scusami e grazie infinite
Ciao
Dade 

 scusami e grazie infinite
Figurati... prego!
Ciao
Raf