Hallo mensen,
ik heb een class (ATL), met enkele functies. Deze is geschreven in C++. De functie waar het om gaat heeft alleen optionele parameters, daarom zijn deze dus van het type VARIANT.
In de eerste parameter verwacht ik een string indien deze meegegeven is. Om de applicatie te testen heb ik 2 testapplicaties, een hta (vbscript) en een executable (vb6).
In de hta roep ik mijn functie als volgt aan (na het creeeren van het object e.d.)
Dit gaat zonder problemen. Maar mijn VB6 testapp heeft wat meer problemen.
Het probleem is als volgt, ik heb in mijn getUrl functie een stuk geschreven om een VARIANT om te zetten naar een BSTR. Daarbij kijk ik naar het varianttype (variant.vt). Op het moment dat ik de functie aanroep vanuit VB6 is het variant type: 16392
Echter, als ik in de header file kijk (WTypes.h) is er geen variant type met de waarde 16392, het enige dat in de buurt komt is een VT_BYREF, deze is namelijk precies 16384, een verschil van 8.... nu kan ik ook wel gaan checken op de types + 8, maar dat is vies om te doen, en ik wil graag een verklaring voor het verschil, iemand enig idee?
De functie die een VARIANT omzet naar een BSTR:
ik heb een class (ATL), met enkele functies. Deze is geschreven in C++. De functie waar het om gaat heeft alleen optionele parameters, daarom zijn deze dus van het type VARIANT.
In de eerste parameter verwacht ik een string indien deze meegegeven is. Om de applicatie te testen heb ik 2 testapplicaties, een hta (vbscript) en een executable (vb6).
In de hta roep ik mijn functie als volgt aan (na het creeeren van het object e.d.)
VBScript:
1
| sUrl = oApp.getUrl( txtCustomer.value ) |
Dit gaat zonder problemen. Maar mijn VB6 testapp heeft wat meer problemen.
Visual Basic 6:
1
| strUrl = oApp.getUrl(strCustomer) |
Het probleem is als volgt, ik heb in mijn getUrl functie een stuk geschreven om een VARIANT om te zetten naar een BSTR. Daarbij kijk ik naar het varianttype (variant.vt). Op het moment dat ik de functie aanroep vanuit VB6 is het variant type: 16392
Echter, als ik in de header file kijk (WTypes.h) is er geen variant type met de waarde 16392, het enige dat in de buurt komt is een VT_BYREF, deze is namelijk precies 16384, een verschil van 8.... nu kan ik ook wel gaan checken op de types + 8, maar dat is vies om te doen, en ik wil graag een verklaring voor het verschil, iemand enig idee?
De functie die een VARIANT omzet naar een BSTR:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| BSTR CApplication::pGetBstrFromVariant( VARIANT vtValue ) { BSTR pBstr = 0; VARIANT vtTemp; VariantInit( &vtTemp ); switch ( vtValue.vt ) // bij aanroep vanuit VB6 is dit dus vreemd genoeg 16392 { case VT_BSTR: pBstr = vtValue.bstrVal; break; case VT_VARIANT | VT_BYREF: VariantCopy( &vtTemp, vtValue.pvarVal ); pBstr = vtTemp.bstrVal; break; } return pBstr; } |