使用SSE将float值从汇编器DLL返回到C
Returning float value from Assembler DLL to C++ using SSE
我遇到了从dll汇编器返回float值为c 程序的问题。我想应该在XMM0寄存器中处理它,我错了吗?这是主文件:
#include "stdafx.h"
#include<windows.h>
#include<iostream>
#include <cstdio>
#include <thread>
#include <vector>
using namespace std;
extern "C" float _stdcall MyProc1(float begin, float end, float x2 ,float x1, float x0); //dll assembler
int main(int argc, _TCHAR* argv[])
{
float suma=0;
suma = MyProc1(12.75,9.3,0,0,1);
cout << std::hex<< suma << endl;
getchar();
return 0;
}
这是我的汇编器DLL:
.686p
.MODEL FLAT, STDCALL
OPTION CASEMAP:NONE
INCLUDE C:masm32includewindows.inc
.mmx
.xmm
.DATA
pi dd 3.14159265358979 ; constant
.CODE
DllEntry PROC hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
mov eax, TRUE
ret
DllEntry ENDP
MyProc1 proc b:DWORD, e:DWORD, x2: DWORD, x1: DWORD, x0:DWORD
movss xmm0,[b]
ret
MyProc1 endp
END DllEntry
返回值是-1。#ind,为什么?
这是非常具体的编译器,但是我想您使用的是32位Microsoft编译器。
在这种情况下,当您定义了函数以返回浮点时,您需要将结果放在浮点堆栈的顶部。
检查您的C 代码的组件输出以确定 - 您应该在函数调用后查看fst
或fstp
指令。
相关文章:
- 从非托管 C# DLL 返回列表/数组
- C++ 安全数组在从 c# COM dll 返回时具有无效数据
- C# 中的 C++ DLL 返回 -858993460
- LoadLibrary('user32.dll') 返回 14007
- 从 dll 返回多个字符串
- 如何从C DLL返回的指针中获得VBA中的整个矩阵
- 如何处理从C#中的C DLL返回的INTPTR
- 将C#struct传递给C 不受管理的DLL返回错误结果
- C++ - 加载库为自制 DLL 返回 126 错误
- 嵌入式mono:将数组从C#DLL返回/复制到C++
- VBA调用相同的C DLL返回不同的结果
- C++ DLL 返回指向 std::list<std::wstring 的指针>
- Qt 5.2 DLL返回与应用程序调用DLL不同的结果
- 客户端正在获取从C++COM dll返回的字节数组
- 从DLL返回std::wstring是否安全
- 如何正确地从dll返回std::list
- 如何在.NET Visual Basic应用程序中读取从C++DLL返回的const char*
- 从 c++ dll 返回 double* 到 delphi 程序
- 从数组数据中缺少第一个元素的 DLL 返回C++结构
- dll从VC++导入到VB函数的转换从dll返回错误,因为缺少链接库