Na 2 vreemde visual basic problemen (deze en deze) kom ik nu weer een nieuw vreemd probleem tegen. (Nog steeds in hetzelfde project overigens)
Ik heb in mijn vb code regelmatig functie-oproepen naar functies in een dll (in vc++ 6 geschreven).
Nu krijg ik recent een probleem dat sommige van deze functie-oproepen een Division By Zero error geven (visual basic vangt deze fout dus op).
Als ik de dll in visual studio debug en er stap voor stap doorloop, zie ik dat er bij visual studio de volgende lijn bij de log komt:
Deze fout krijg ik net op het moment dat de functiewaarde teruggegeven moet worden.
De eerste regel in visual basic waar ik de fout bij had ziet er ongeveer zo uit:
myFunction geeft een Double terug, dus visual basic hoort deze te casten naar een long.
Nu heb ik om eens te testen een eenvoudige functie toegevoegd aan de dll:
Als ik nu in visual basic die regel vervang door:
Verdwijnt de Division By Zero fout door visual basic, en de Float Inexact Result fout in c.
De fout kwam dan nog een keer voor:
Waarbij myMethod een Long verwacht.
Vervangen door
en de fout verdween.
Nu stonden deze oproepen er al wel een hele tijd, en ik vermoed dat er nog wel meer punten in de code zijn waar er automatisch gecast moet worden, maar ik kreeg dus nu recent slechts op die paar plaatsen deze fout.
Iemand die hier een verklaring voor ziet?
Ik heb in mijn vb code regelmatig functie-oproepen naar functies in een dll (in vc++ 6 geschreven).
Nu krijg ik recent een probleem dat sommige van deze functie-oproepen een Division By Zero error geven (visual basic vangt deze fout dus op).
Als ik de dll in visual studio debug en er stap voor stap doorloop, zie ik dat er bij visual studio de volgende lijn bij de log komt:
code:
1
| First-chance exception in djDecks.exe (KERNEL32.DLL): 0xC000008F: Float Inexact Result. |
Deze fout krijg ik net op het moment dat de functiewaarde teruggegeven moet worden.
De eerste regel in visual basic waar ik de fout bij had ziet er ongeveer zo uit:
Visual Basic:
1
| myLong = myFunction(myParameter) |
myFunction geeft een Double terug, dus visual basic hoort deze te casten naar een long.
Nu heb ik om eens te testen een eenvoudige functie toegevoegd aan de dll:
C:
1
2
3
4
| int double_to_int(double d) { return (int)d; } |
Als ik nu in visual basic die regel vervang door:
Visual Basic:
1
| myLong = double_to_int(myFunction(myParameter) |
Verdwijnt de Division By Zero fout door visual basic, en de Float Inexact Result fout in c.
De fout kwam dan nog een keer voor:
Visual Basic:
1
| myMethod myDouble |
Waarbij myMethod een Long verwacht.
Vervangen door
Visual Basic:
1
| myMethod double_to_int(myDouble) |
en de fout verdween.
Nu stonden deze oproepen er al wel een hele tijd, en ik vermoed dat er nog wel meer punten in de code zijn waar er automatisch gecast moet worden, maar ik kreeg dus nu recent slechts op die paar plaatsen deze fout.
Iemand die hier een verklaring voor ziet?