anoniem Geplaatst: 17 december 2003 Delen Geplaatst: 17 december 2003 Het zal wel weer iets simpels zijn, maar ik zie de oplossing nog niet: In VB wordt een functie aangeroepen uit een DLL, geschreven in C++. De functie krijgt zo'n 15 parameters mee, van de typen integer en boolean. Er zitten ook integer en boolean arrays tussen. In de DLL worden deze parameters opgepikt met behulp van pointers, die naar het adres van de parameter wijzen. Het (merkwaardige?) feit doet zich voor dat sommige pointers naar een adres wijzen met de correcte inhoud (de waarde die VB meegeeft aan de functie) en andere met niet correcte inhoud. Het lijkt erop dat deze laatste pointers naar een adres wijzen waar ook weer een adres in staat. In VB hebben alle parameters de juiste waarde. In C++ ongeveer de helft. Hoe zou dat kunnen? En wat kan ik er aan doen? Heeft het misschien met alignment te maken? Een verlossend woord zou heel welkom zijn.......... Quote Link naar reactie
anoniem Geplaatst: 30 december 2003 Auteur Delen Geplaatst: 30 december 2003 Hoe zijn ze in C++ gedeclareerd ? Als je in VB strings doorgeeft, moeten ze ook in C++ als strings gedeclareerd worden en klopt dan het formaat ? Declareer je in C++ 10 posities, dan moet je de VB parameter ook uitvullen tot en met 10 posities. Quote Link naar reactie
anoniem Geplaatst: 30 december 2003 Auteur Delen Geplaatst: 30 december 2003 Bedankt voor je reactie. Er worden integers en booleans doorgegeven, geen strings. In C++ moesten de integers met de cast __int16 worden gedeclareerd, omdat VB 16-bits integers gebruikt. Zowel de integers als de booleans komen goed over. Er zijn echter twee integer-arrays en twee boolean-arrays die ook worden doorgegeven. In C++ wijst de pointer naar het eerste adres van de array. Ik zou verwachten dat een constructie als: *(pintarray + 3) naar het derde element in de integer-array zou verwijzen, maar dat is niet het geval. Op die locatie staat een adres of de waarde is ongedefinieerd. De grenzen worden wel bewaakt: bij een overschrijding van de bounds (bijv. met *(pintarray + 1000)) wordt een boodschap gegenereerd die meldt dat een verboden geheugenlocatie wordt benaderd. Weet u misschien hoe ik de volgende elementen uit de array kan benaderen? Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen