Ga naar inhoud

Onjuiste waarden in functie-parameters


anoniem

Aanbevolen berichten

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..........
Link naar reactie
  • 2 weken later...
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?
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...