2011-09-04 84 views
1

比方说,我有以下的内联汇编代码...内联汇编使用命名空间

_asm { 
    fst dword ptr [eax]mystruct1.mymember 
    fstp dword ptr [ebx]mystruct2.mymember 
} 

...可惜mystruct1和mystruct2都具有相同的名称,并在不同的命名空间。我试过这样...

_asm { 
    fst dword ptr [eax]mynamespace1::mystruct.mymember 
    fstp dword ptr [ebx]mynamespace2::mystruct.mymember 
} 

...但它不起作用。是否有可能以某种方式指定命名空间没有C++使用语句(这不会工作,因为你需要改变操作之间使用的命名空间)? 不,我不能更改命名空间,结构或成员名称。

+0

1.为什么使用内联汇编? 2.您可能需要使用错位的名称,这甚至会进一步降低可移植性。 –

+0

尝试在函数的本地范围内使用'typedef's。 –

+0

我正在使用内联程序集,因为我的工作需要我。这是一个Windows驱动程序,所以我不在乎可移植性。不,你不需要使用错位的名字;其他指令接受命名空间(例如:'jmp [mynamespace :: mystruct :: mystaticmember]')。 – kingofx87

回答

2

一种解决方案是创建一个参考和使用,而不是:

MyStruct& ms = mynamespace1::mystruct; 

_asm { 
    fst dword ptr [eax]ms.mymember 
    fstp dword ptr [ebx]ms.mymember 
} 

我不知道这是否可能在您的情况,虽然。