Newsgroup: it.comp.programmare.win32
Titolo: [?] DLL in VC da usare in VB... :(

Ciao a tutti. Premetto che è un po' di tempo che non mastico C/C++ quindi
scusate la mia ignoranza che potrebbe sembrare (a molti?) banale. Ho aperto
Visual C++ (6.0) e ho cheato un nuovo progetto Win32 dll". A questo punto mi
sono trovato davanti questo codice:
// Test2.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
    return TRUE;
}
Messo in automatico da VC. A questo punto ho fatto copia-incolla del
seguente spezzone
/* DLL di dimostrazione su come fare la somma di un array dichiarato
in Visual Basic e passato in Microsoft Visual C++ 4.0 */
extern "C" __declspec (dllexport) long __stdcall SommaArray(short
*Array,long Elementi)
{ 
long SommaParziale=0; 
long ElementoCorrente; 
 
for (ElementoCorrente=0;ElementoCorrente<Elementi;ElementoCorrente++) 
{ 
  SommaParziale+=Array[ElementoCorrente]; 
} 
return SommaParziale; 
} 
Perchè da bravo bambino avevo trovato un bell'articolo sull'argomento. Questa funzione infatti gira senza problemi!
Apro VB (6.0) dichiaro l'API
Private Declare Function SommaArray Lib "Test2.dll" Alias "_SommaArray@8" (ByRef PuntaArray As Integer, ByVal Elementi As Long) As Long
E tutto fila liscio come l'olio...
Ma...
Adesso arriva il turno di scrivere la MIA funzione :)
Eccola qua:
// Questa è la mia prova... :)
extern "C" __declspec (dllexport) char* __stdcall ReturnStringa(){
    return "PIPPO\0";
}// ReturnStringa
Dichiaro l'API 
Private Declare Function ReturnStringa Lib "Test2.dll" Alias "_ReturnStringa@0" () As String
Ma naturalmente non funziona. Va in GPF l'IDE di VB (Global Protection Fail - cioè si pianta tutto... :( )
Cos'è che non va??? Io ho assolutamente bisogno di fare un'API che mi ritorni una stringa per velocizzare tutti i miei progetti scritti in VB... Thanks
Ah... gli alias li ho ricavati con Dependency Walker e l'articolo l'
ho trovato qui:
http://www.it-lang-vb.net/Documentazione/Articoli/DllxVb.htm
Un grazie di cuore a chiunque mi aiuterà...
CiaoZ
SebaMix
--
Sebastiano Pallaro
--
Sito lavoro : 
http://www.infotrade.it
Sito personale : 
http://sebamix.supereva.it
Sito Comune del NG it.comp.lang.visual-basic : 
http://www.it-lang-vb.net
Per scrivermi : togliete ".ot" dall'indirizzo di posta elettronica
--

Rimuovi .co per scrivermi<

 direttamente dentro la stringa.
[...]
Scusa, non ho capito... in che senso???



il tuo errore non é da ricercarsi nella tua bella funzioncina... ma
nel fatto che VB non supporta i puntatori. Secondo problema
é dato dal fatto che non tutti i tipi standard del C++ possono
essere esportati direttamente in Visual Basic.
Se hai modo di dare un'occhiata a MSDN vedi che Visual Basic
per far riferimento alle stringhe proveniente da oggetti ActiveX
e da DLL utilizzare un tipo definito come BSTR. MSDN indica
di utilizzare il tipo LPCTSTR come tipo equivalente a BSTR.
Praticamente si tratta di un puntatore costante a stringa.
Secondo presupposto é caratterizzato dal compilatore.
Ora avendo tu correttamente importato i nomi devi
assicurarti che effettivamente VC al momento del linking
del codice crei una versione 'stdcall' delle procedure indiicate
con __declspec(dllexport).
Questi problemi te li indico perché ho avuto io a suo tempo
gli stessi problemi utilizzando una dll in vb che avevo creato
basandomi su delle mie classi in c++
Per quanto concerne la deallocazione della DLL indicata
nel precedente reply non é quello il problema, visto
che é ancora dentro il suo campo d'azione l'oggetto
cod

 Ah... gli alias li ho ricavati con Dependency Walker
Se vuoi evitare di avere i nomi delle funzioni esportate decorati (es:
_SommaArray@8 invece di SommaArray) è sufficiente usare un file .def da
allegare al progetto, come ai tempi di Win16.
Lorenzo

 Ah... gli alias li ho ricavati con Dependency Walker
Se vuoi evitare di avere i nomi delle funzioni esportate decorati (es:


 Ah... gli alias li ho ricavati con Dependency Walker
Se vuoi evitare di avere i nomi delle funzioni esportate decorati (es:


 Ah... gli alias li ho ricavati con Dependency Walker
Se vuoi evitare di avere i nomi delle funzioni esportate decorati (es:


Scusate gli invii multipli, ma il provider che uso in ufficio (Aruba) è una
vera porcheria...
Lorenzo