2011-09-04 118 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 
} 

我不知道這是否可能在您的情況,雖然。