Ich versuche, eine 32-Bit-Gleitkommazahl in eine erweiterte Gleitkommazahl mit 80 Bit zu konvertieren. Ich benutze MSVC x86. Ich habe versucht, den folgenden Inline-ASM-Code:Konvertieren von 32-Bit-Gleitkommazahl nach IEEE 80-Bit
void Convert32To80(float *value, void *outValue)
{
__asm
{
fld float ptr [value];
fstp tbyte ptr [outValue];
}
}
Hier void *outValue
ist ein Puffer, der groß genug ist, 10 Bytes zu halten. Das sieht gut aus, aber es stürzt ab, wenn es läuft.
Jede Hilfe wird geschätzt!
"Absturz beim Ausführen." Welche spezifischen Fehler bekommen Sie? – James
Ich erhalte keinen spezifischen Fehler. Es ist eine C++/CLI-DLL, die aus verwaltetem Code geladen wird (es ist etwas mit dem ASM, andere Inline-ASM-Stubs funktionieren gut). Ich bekomme dies: "Die Laufzeit hat einen schwerwiegenden Fehler festgestellt. Die Adresse des Fehlers war bei 0x64f9fca1, auf Thread 0x1904. Der Fehlercode ist 0xc0000005. Dieser Fehler kann ein Fehler in der CLR oder in der unsicheren oder nicht Nachprüfbare Teile des Benutzercodes: Häufige Ursachen für diesen Fehler sind Fehler bei der Benutzermarshalation für COM-Interop oder PInvoke, die den Stack beschädigen können. " – Janiels
Sie müssen mit Ihrem Debugger überprüfen, welche Anweisung den Absturz verursacht. Vielleicht ist Ihr outValue schlecht (NULL oder so ähnlich)? – Suma