Newsgroup: it.comp.lang.visual-basic
Titolo: DLL ci STO IMPAZZENDO

Allora, salve a tutti,
sono un po' nei casini, e non riesco a tirarne fuori le gambe.
ho realizzato una dll in VC++ che vorrei poter utilizzare in Visual Basic.
In VC++ non da' problemi di sorta, e neanche con il VB6 se dichiaro le
funzioni della DLL esplicitamente. Es
Declare Function SFunc Lib "../testdll.dll" (ByVal Value As Integer) As
Integer
Il PROBLEMA nasce QUANDO voglio importare la DLL dall'IDE selezionando
"Progetto"->"Riferimenti"->"Sfoglia"->miadll.dll
In questo caso mi compare una msgbox con questo messaggio : 
"Impossibile aggiungere un riferimento al file specificato"
E non riesco a capire perche'. Altro GROSSO problema e' che per lavoro
devo riuscire a far funzionare questa DLL con il VB6 SP5. Il quale:
1) O non mi carica la DLL (dicendomi che non esiste nemmeno!)
2) Oppure il VB CRASHA senza tanti problemi (VB6.exe error)
Non so che pensare. La dll non ha nulla di speciale, si interfaccia
solamente alla seriale.
Qualche suggerimento?
Grazie a tutti,
Gianluigi
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 solamente alla seriale.
E se usassi il Comm Control incluso in VB?
Ciao 

La DLL non è COM Compatibile ma è una dll classica.
Bye,
-- 
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site 4 : 
http://www.thetotalsite.it
MariokartDS Codice Amico: 532639027909 - CarmineC in MarioKartDS
"Un problema non è un problema se può essere risolto" 

 La DLL non è COM Compatibile ma è una dll classica.
Ma tu la smetti?
Ti stai mangiando MSDN in questi giorni? :)
Ciao 

 E se usassi il Comm Control incluso in VB?
hehe infatti alla fine abbiamo adottato questa soluzione. 
Pero' volevamo cercare di capire il perche' di questo comportamento... :)
Ciao e grazie!


 Pero' volevamo cercare di capire il perche' di questo comportamento... :)
Senza offesa...semplicemente perche' non avete la piu' pallida idea di cosa 
state facendo?
Cioe'...
E' come se uno se ne viene fuori dicendo: ho costruito un motore elettrico. 
Perche' se lo monto sulla mia macchina al posto di quello normale, quando 
faccio benzina non funziona niente?
Avete realizzato una DLL in C pensando di darla in pasto a VB senza sapere 
come VB gestisce le DLL. Qual'e' il problema se non funziona? Era 
esattamente il vostro obiettivo sin dall'inizio o non avreste agito cosi', 
no?
Per inciso, se come scrivi, non sapete niente di VB6 e poi chiedi come si 
trasforma una DLL "classica" in una COM...la soluzione migliore e' che ti 
prenda un mesetto di tempo, un bel libro su Windows, uno su COM, uno su VB, 
e che tu studi.

 come?!?
Devi farla in modo diverso quando la crei con c++.
Come prima cosa, ci deve essere almeno 1 classe public.
Non ho mai creato una dll COM in c++... mi sembra che devi passare qualche 
argomento particolare al compilatore e/o includere qualche file particolare.
Con visualc++ ci dovrebbe essere un tipo di progetto apposito... vedi un 
pò...
Bye,
-- 
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site 4 : 
http://www.thetotalsite.it
My Blog: 
http://www.thetotalsite.it/blog


 e che tu studi.
concordo, ma sfortunatamente non ce l'ho il mesetto di tempo :)


 "trasformare" questa DLL "classica" in una DLL COM? se si come?!?
Non funziona così.
A parte le due tecnologie che sono completamente differenti, anche le 
logiche su cui si basano non sono intercambiabili.
Una dll standard è una libreria che espone *funzioni*, una dll COM espone 
*classi* (e no, non basta definire delle classi in c++ per rendere la dll 
COM compliant).
Adesso mi chiedo, ma perchè se la dll in c++ funziona la vuoi per forza 
trasformare in una dll activex?
Ciao 

 SP5 da' tutti questi intoppi inaspettati...
Non ho capito quale sia secondo te la differenza tra VB6 e VB6 SP5.
Se ti riferisci al solo fatto dell'aggiornamento il problema non è 
sicuramente quello.
Ciao 

Inoltre, questo va letto assolutamente se vuoi usare dll in c++ da vb:
http://www.visual-basic.it/articoli/agVB_VC.htm


 SP5 da' tutti questi intoppi inaspettati...
Gia' visto succedere anche con altre cose.
Probabilmente hai una qualche stranezza nelle declare o nel modo in cui usi 
la DLL.
VB6 liscio e' bacato, e per puro caso puo' succedere che uno dei bug faccia 
funzionare bene la tua DLL.
VB6 SP5 ha centinaia di bug in meno, e magari quello che permetteva alla tua 
DLL di funzionare adesso non c'e' piu'.
Cmq, senza i sorgenti della DLL, difficilmente si riesce a capire quale che 
sia il problema.
O perlomeno cerca di circoscrivere il problema...tipo, cerca di capire se e' 
il declare di una funzione particolare, o se e' una chiamata...

 con il VB6 SP5 da' tutti questi intoppi inaspettati...
Cosa ?!?!
E' meglio che ti leggi quell' articolo che ti ho consigliato va...
Mi spieghi poi che differenza c'è tra VB6 e VB6 sp5?
... non capisco come possa un service pack rendere "magicamente" una dll COM 
o meno...


 forza trasformare in una dll activex?
Forse perchè è troppo lunga la sintassi della declare :P :P :P


 COM o meno...
Qui rispondo a te e a Fabio...non c'entra quello. Il punto e' che in VB6 
c'erano dei bug particolarmente ridicoli che permettevano a della roba 
"guasta" di funzionare. Adesso sono secoli che non uso VB6 liscio, ma 
ricordo di averci litigato parecchio su 3/4 progetti "legacy" fatti con VB6 
da alcuni colleghi e mai ricompilati che hanno smesso di funzionare su VB6 
SP5.

 smesso di funzionare su VB6 SP5.
Incredibile...
Non pensavo fosse buggato a tal punto!


"trasformare" questa DLL "classica" in una DLL COM? se si come?!?
Perchè non usi la DLL nel modo classico, e cioè chiamndo le funzioni esposte?
Io ho fatto delle funzioni di comunicazione proprio per la seriale in una DLL
standard, che chiamo con delle declare come qui sotto.
'----------------
'RS232lib.Dll
Declare Sub SetSerialPort Lib "rs232lib" (ByVal com_no As Long)
Declare Function OpenSerial Lib "rs232lib" () As Long
ecc..
Perchè tu vuoi fare una active X?
Comunque leggi questo, anche se spiega il contrario, magari ti può servire.
http://www.visual-basic.it/articoli/agDllByVB.htm
--
ciao
  Stefano

 VB6 SP5.
Non ho mai usato VB6 liscio, anche perchè l'ho sempre visto uscire dalla 
scatola con il bel CD SP3.
Non dubito che fosse pieno di buchi, come è vero che i vari SP hanno 
corretto molto e bacato altro.
Sono solo un po' perplesso sul fatto che qualcosa che funziona si possa 
definire bacato, a meno che non sfrutti volontariamente un bug per 
funzionare, almeno in questo caso.
Comunque le abbiamo viste quasi tutte, quindi non so.
Ciao 


io facevo cosě e mi evitava tutte le storie dei .def
http://groups.google.it/group/it.comp.lang.visual-basic/browse_thread/thread/938eb618c9d3bba0/2ac60ef7f3f1a32d?q=zanna+c+dll+winapi&rnum=5#2ac60ef7f3f1a32d
Ciao
-- 
Free .Net Reporting Tool - 
http://www.neodatatype.net
 

 funzionare, almeno in questo caso.
Oddio...mi sembrava cosi' semplice, come spiegazione ;-D
Vabbe'...
Ipotesi di campo booleano su VB6 SP5 e come da specifiche MS:
0 = False
Tutto il resto e' True
VB6 OOTB:
1 = True
0 = False
Tutto il resto e' False <-BUG
Codice bacato di un programmatore pirla:
blnSticazzi = -1
[altra roba nel mezzo]
If not blnSticazzi then
    FaiQualcosa
else
    EseguiRoutineBuggataCheFaEsplodereIlMonitor
end if
Risultato: su VB6 OOTB, funziona tutto splendidamente. Su VB6 SP5, ti 
esplode il monitor.
Problema: come la giriamo? Il primo bug fa in modo che i bug del software 
non vengano fuori ed il tutto funzioni correttamente. Pero' correggi i bug 
di VB6, e non funziona piu' nulla :-D
Per inciso...stavo andando a memoria, ma e' quanto di piu' preciso riesca a 
ricordarmi riguardo ad un problema simile visto 4 anni fa su un applicativo 
VB che usava le Windows Form.

 di VB6, e non funziona piu' nulla :-D
Io per i bug faccio i workaround, non li sfrutto nella speranza che non 
vengano corretti.
P.S.: ma alla fine hanno corretto il fatto del True/False che viene 
localizzato se convertito in stringa ma non viceversa, e che dicevano di 
aver corretto nell'SP4? (Non so nell'SP5 e 6, ma di sicuro nell'SP4 non 
funzionava ancora).
Ciao