所以我这里有这段代码,它不允许我编译我的dll,它只是返回上面的错误。
void Math::AngleVectors(const Vector &angles, Vector *forward, Vector *right, Vector *up)
{
auto SinCos = [](float flRadians, float* pflSine, float* pflCosine)
{
__asm
{
fld DWORD PTR[flRadians]
fsincos
mov edx, DWORD PTR[pflCosine]
mov eax, DWORD PTR[pflSine]
fstp DWORD PTR[edx]
fstp DWORD PTR[eax]
} // here it says the error "an 'asm' declaration is not allowed here"
};
[...]
}
我不知道如何解决这个问题,有人知道这里出了什么问题吗?
我的目标是 x86
最佳答案
不幸的是,您无法做您想做的事。出于安全考虑,Visual Studio 2019 中的 lambda 内部不支持内联汇编:
解释一下答案(很详细),您必须将 asm 放入命名函数中并让 lambda 调用:
void SinCosAsm(float flRadians, float* pflSine, float* pflCosine) {
__asm
{
fld DWORD PTR[flRadians]
fsincos
mov edx, DWORD PTR[pflCosine]
mov eax, DWORD PTR[pflSine]
fstp DWORD PTR[edx]
fstp DWORD PTR[eax]
}
//...
}
void Math::AngleVectors(const Vector &angles, Vector *forward, Vector *right, Vector *up)
{
auto SinCos = [](float flRadians, float* pflSine, float* pflCosine)
{
SinCosAsm(flRadians, pflSine, pflCosine);
};
[...]
}
关于c++ - 此处不允许使用 'asm' 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67359409/