Newsgroup: it.comp.programmare.win32
Titolo: Maledetta DLL!!! Funziona in VC ma non in VB!!!

Ciao, scusate per le continue forkate del thread,
ma mi sto esaurendo con le DLL :-)
Allora: finalmente la dll da me creata sembra funzionare
perfettamente in un programma VC e di sicuro funziona anche
nelle altre implementazioni (ma ora non ha importanza!).
Il problema è visual basic!
Perchè la libreria, compilata con __cdecl (lo so che VB accetta
__stdcall!!) funziona bene in VB, solo se eseguo il compilato e
non nell'IDE. Infatti, in quest ultimo, con la dll __cdecl, mi
apre correttamente la funzione (la esegue con successo se disattivo
la gestione dell'errore), ma restituisce (se gestisco l'errore):
"Convenzione di chiamata DLL non valida".
Ora, se provo a creare la dll con _stdcall (cazzo dovrebbe funzionare in 
VB!!), ed eseguo i passi precedenti, mi dice che non trova proprio 
l'ingresso della funzione richiesta nella DLL!!!
Che devo fare?!?

 Che devo fare?!?
Intanto prendi il programmino che ti ho indicato e controlla cosa viene
esportato.
Ciao, Enrico

 Oppure crei un file .def ed esporti le funzioni come preferisci.
Il problema non è importarlo in VC, perchè in questo funziona...
il problema è usarle in VB!

 il problema è usarle in VB!
Tanto per provare fai un caricamento dinamico della DLL chiamando
LoadLibrary e GetProcAddress e vedi se ti trova la funzione: potrebbe essere
che la dichiarazione che fai in VB non sia corretta (non uso VB quindi
potrei aver scritto una scemenza).
Ciao, Enrico

 potrei aver scritto una scemenza).
Già fatto...me le trova

 Già fatto...me le trova
Ok, allora la DLL dovrebbe essere a posto e il problema spostarsi su VB.
Tu avevi scritto:
Perchè la libreria, compilata con __cdecl (lo so che VB accetta
__stdcall!!) funziona bene in VB, solo se eseguo il compilato e
non nell'IDE. Infatti, in quest ultimo, con la dll __cdecl, mi
apre correttamente la funzione (la esegue con successo se disattivo
la gestione dell'errore), ma restituisce (se gestisco l'errore):
"Convenzione di chiamata DLL non valida".
Ora, se provo a creare la dll con _stdcall (cazzo dovrebbe funzionare in
VB!!), ed eseguo i passi precedenti, mi dice che non trova proprio
l'ingresso della funzione richiesta nella DLL!!!
Se non trova l'ingresso della funzione vuol dire che sbagli a scrivere
qualcosa in VB, ma non mi pare un problema di DLL. Io indagherei in VB come
cavolo si importa una funzione di una dll.
Tornando indietro nei tuoi messaggi ho trovato questo:
Public declare Sub Messaggio lib "bla.dll" (byval messaggio as string)
Sicuro che byval e string siano corretti? Non vorrei che fosse un problema
di parametri. In VC come dichiari il parametro?
Ciao, Enrico

 di parametri. In VC come dichiari il parametro?
In Visual Basic è tutto ok...
ho provato in tutti i modi, sia lato VB che lato VC, char *, LPSTR, 
LPCSTR...Byval, Byref...
Ho capito solo una cosa: con __stdcall, VB non riesce neanche a trovare
l'ingresso! Con __cdecl invece riesce ad entrare, anche se da errore.
Se la funct nella libreria non prende parametri, funziona bene in VB,
ma se prende un solo parametro, da quell'errore!
La DLL è funzionante, il problema è VB. In giro, molti hanno avuto lo 
stesso problema...qualcuno ha risolto usando __stdcall! Da non crederci...!

 ha scritto nel messaggio 
news:d998sd$omt$1...@newsreader.mailgate.org...

Non conosco il VB quindi potrei dire una cavolata :-)
Se non sbaglio le stringhe in VB non sono semplici array di caratteri (come 
nel C), ma BSTR.
prova a vedere qui se c'è qualcosa di utile:
http://sandsprite.com/CodeStuff/Writing_A_C_Dll_for_VB.html

 nel C), ma BSTR.
Non dici una cavolata, come non l'ho fatta io (uso VB da 10 anni). 
Infatti, se leggi un nuovo thread anti-microsoft che ho creato, il
CBuilder mi ha dato ragione!
Usando solo extern "C" e __stdcall (le stesse che usavo in VC)