Newsgroup: it.comp.lang.visual-basic
Titolo: chiamare da VB una DLL in VC++

 ...
Ma non e' che la dllexport sopprime l'underscore?
Prova nella dichiarazione VB a non considerare l'alias e
a riferirti direttamente al nome della funzione "somma"
senza l'underscore.
Filippo Neri

 Filippo Neri
Già provato. E ovviamente non funziona.
Grazie per la collaborazione
Lorenzo



...

Io per dire il vero non ci ho ancora capito nulla sul formato che hanno i nomi
delle funzioni che si esportano da una DLL scritta da VC++.
Quindi per non saper ne leggere ne scrivere mi vado a cercare come e' che mi ha ribaltato i nomi delle mie funzioni:
Possibilita:
	1) tasto destro sulla DLL, scegli "Anteprima" e vedi i nomi delle funzioni che hai esporatto
	2) apri la DLL o il .Lib in modo binario (tipo HEdit.exe o NortonCommande) e ti vai a cercare i nomi delle funzioni.
Sono soluzioni idiote, ma io mi so accontentare, l'importate e' riuscire a chiamare ste benedette funzioni.
-- 
Hi, Ciao
Ettore                 By -MES-
http://freeweb.aspide.it/freeweb/ilmes
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb

Integer, ByVal b As Integer) As Integer
Un "int" del C++ e` 4 byte; un "Integer" del Basic e` 2 byte.  Qui nella
somma probabilmente non te ne accorgeresti neppure (tronchi i 2
byte alti del valore di ritorno...), in un altro caso puo` essere un grave
disastro.  Suggerimento: nelle interfacce C++/Basic, scordarsi int e
integer, limitarsi a short e long che SONO della stessa lunghezza per
entrambi i linguaggi...!!!
Alex

 
Per evitare questo problema puoi dichiarare esplicitamente la funzione 
somma nella sezione exports del module definition file della DLL:
EXPORTS
    somma
In questo modo il linker del VC++ riconosce che somma = _somma@8 ed esporta 
la funzione col nome "non decorato".
Ciao,
Antonello
--
// ------------------------------------------------------------
// Antonello Salvatucci
// Software Developer, Technical Writer
// LEGO A/S SPU-Darwin, Kloevermarken 120, 7190 Billund DENMARK
// 
// antonello at digi. lego. com             
http://www.lego.com

 
Premetto io programmo solo ed esclusivamente in VB tuttavia anch'io un paio
di settimane fà ho cominciato ad avvicinarmi al C++ per l'esattezza al
Borland C Builder, ed anch'io ho avuto lo stesso problema cimentandomi con
le DLL.Ora ho risolto grazie ad un po' di Esempi che ho recuperato e a
qualche risposta sul NewsGroup.Nel caso tu non abbia ancora risolto il
problema ti posto un esempio, che dovrai poi verificare:
// Questo è il prototipo della function
extern "C" int __declspec(dllexport) WINAPI somma(int a,int b); 
//---------------------------------------------------------------
// Questo è la Function.
extern "C" int __declspec(dllexport) WINAPI somma(int a,int b)
{
 return(a+b);
}
Non so se sia poi la maniera più corretta tuttavia funziona egregiamente.
Per quanto riguarda la dichiarazione in VB, come qualcuno ti ha già postato
sul Newsgroup, fai attenzione che dichiarando int le variabili in Visual C,
dovrai poi definirle Long in Visual Basic :
Declare Function somma Lib "LorenzoDll.dll" (ByVal a As Long, ByVal b As
Long) As Long o altrimenti definirle short in Visual C.
Spero ti possa essere di aiuto
Ciao Ettore