Diese Frage geht direkt an die (vielen) Assembler-Profis hier im Forum.
Aktuell arbeite ich in den letzten Monaten an meinem bisher größten AutoIt-Projekt (werde ich im Laufe des Jahres noch veröffentlichen).
Hierfür wäre es sehr schön, wenn ich eine Funktion hätte, welche sehr fix die Summe über ein Float- oder Double-Array im Speicher berechnet.
Die Windows-API bietet so eine Funktionalität nicht und die anderen Möglichkeiten die ich habe, sind auch nur Workarounds die mir nicht so gefallen.
Da ich weiß, dass hier viele fähige Assemblerköpfe im Forum herumlungern, wollte ich mal fragen ob jemand mir eine Funktion schreiben kann, welche den Code über Assembler realisiert und aus AutoIt heraus fix aufrufbar macht (gesehen habe ich soetwas hier schon - bin aber selbst völlig minderbemittelt bei dem Thema).
Das Grundgerüst stelle ich mir hierfür folgendermaßen vor:
Global $tData = DllStructCreate("DOUBLE[100]")
; füllen
For $i = 1 To 100
DllStructSetData($tData, 1, $i, 1)
Next
$fSum = _sumUpMemory(DllStructGetPtr($tData), 100)
ConsoleWrite($fSum)
Func _sumUpMemory($pPointer, $iN, $sType = "DOUBLE")
; hier sollte irgendwie der Binary mit den x64 und x86-Binärcode stehen
; dieser sollte dann in den Speicher zur Ausführung geschrieben werden
; und dann per (vermutlich) DllCallAddress ausgeführt werden
If $sType = "DOUBLE" Then
If @AutoItX64 Then
; hier sollte der x64 DOUBLE-Code hin
Else
; hier sollte der x64 FLOAT-Code hin
EndIf
Else ; "FLOAT"
If @AutoItX64 Then
; hier sollte der x86 DOUBLE-Code hin
Else
; hier sollte der x86 FLOAT-Code hin
EndIf
EndIf
EndFunc
Alles anzeigen
Man bräuchte also ingesamt 4x Binärcode, da es ja insgesamt 4 Fälle gibt.
Genial wäre natürlich auch die Nutzung von Vektorfunktionalitäten, wenn diese in älteren CPUs aucht unterstützt werden (soll ja große Kompatibilität haben).
Wer weiß - vielleicht hat einer ja Lust mir entsprechend zu helfen.