okay
21-02-2006, 16:38
ho fatto una dll activex in vb6 che è richiamata da codice c++ (in pratica il contrario di quello che si trova su google [ho i miei motivi per fare questo]).
Ho fatto una applicazione console win32 con vc6 questo è il codice:
#include <stdio.h>
#import "progetto1.dll" no_namespace
void main()
{
BSTR bstrDesc;
try
{
CoInitialize(NULL);
long st = 2;
long ts = 3;
long st1;
_Class1Ptr ptr;
ptr.CreateInstance(__uuidof(Class1));
st1 = ptr->MyVBFunction(&st);
st1 = ptr->AddTest1(&st, &ts);
MessageBoxW(NULL, L"OKAY", L"Messaggio",MB_OK);
}
catch(_com_error &e)
{
bstrDesc = e.Description();
MessageBoxW(NULL, L"ERRORE", L"Messaggio",MB_OK);
}
CoUninitialize();
}
tutto funziona perfettamente infatti la dll vb esegue una msgbox con scritto 2 alla prima chiamata della funzione, alla seconda chiamata della seconda funziona esegue 3+2+128 infatti st1 è = a 133
Il problema è il seguente:
ho fatto un'altra applicazione console win32 ma con Visual Studio NET 2003 ho copiato lo stesso codice e messo nella dir la dll vb6 la compilazione e il link è uguale ma all'avvio alla prima chiamata della funzione il flusso và nel try, ho tolto il try è ho un errore nel file comip.h
se lancio l'exe su win98 dove ho il tool vc6 funziona perfettamente.
se porto l'exe oppure compilo come detto sopra su xp tutto passa nel try{...}
... misteri della programmazione??
se volete potete provare il tutto quì potete scaricare la dll e la lib:
http://www.twork.it/work/Dllvb6.zip
Ho fatto una applicazione console win32 con vc6 questo è il codice:
#include <stdio.h>
#import "progetto1.dll" no_namespace
void main()
{
BSTR bstrDesc;
try
{
CoInitialize(NULL);
long st = 2;
long ts = 3;
long st1;
_Class1Ptr ptr;
ptr.CreateInstance(__uuidof(Class1));
st1 = ptr->MyVBFunction(&st);
st1 = ptr->AddTest1(&st, &ts);
MessageBoxW(NULL, L"OKAY", L"Messaggio",MB_OK);
}
catch(_com_error &e)
{
bstrDesc = e.Description();
MessageBoxW(NULL, L"ERRORE", L"Messaggio",MB_OK);
}
CoUninitialize();
}
tutto funziona perfettamente infatti la dll vb esegue una msgbox con scritto 2 alla prima chiamata della funzione, alla seconda chiamata della seconda funziona esegue 3+2+128 infatti st1 è = a 133
Il problema è il seguente:
ho fatto un'altra applicazione console win32 ma con Visual Studio NET 2003 ho copiato lo stesso codice e messo nella dir la dll vb6 la compilazione e il link è uguale ma all'avvio alla prima chiamata della funzione il flusso và nel try, ho tolto il try è ho un errore nel file comip.h
se lancio l'exe su win98 dove ho il tool vc6 funziona perfettamente.
se porto l'exe oppure compilo come detto sopra su xp tutto passa nel try{...}
... misteri della programmazione??
se volete potete provare il tutto quì potete scaricare la dll e la lib:
http://www.twork.it/work/Dllvb6.zip