我正在做代碼從Linux移植到Windows。我正在使用Visual Studio環境。我陷入了一個問題。#define related Query
有一個函數調用2個參數用於獲取和釋放Windows中的信號量。 Linux的代碼有一個參數
的Windows:
KeInitializeSpinLock(spinlock,oldIRQL);
的Linux
spin_lock_init(spinlock);
我有通用的調用,比如,我不得不使用:
Get_Lock(spinlock);
如何做到這一點的窗戶不改變原型Get_Lock
?
我試過如下:
#define Get_Lock(lock) \
KIRQL oldIrql;\
KeAcquireSpinLock(&(lock),&oldIrql);
#define Release_Lock(sync) KeReleaseSpinLock(&(sync),oldIrql)
但是,編譯器是給錯誤..基本上,我想這是因爲需要爲KeReleaseSpinLock
錯誤
error C2275: 'KIRQL' : illegal use of this type as an expression
error C2146: syntax error : missing ';' before identifier 'oldIrql'
error C2065: 'oldIrql' : undeclared identifier
error C2065: 'oldIrql' : undeclared identifier
error C2065: 'oldIrql' : undeclared identifier
該值保留
oldIrql
值
KIRQL
定義爲
typedef UCHAR KIRQL
我在這裏做什麼錯?還是有沒有其他方法可以在不改變Get_Lock
和Release_Lock
的原型的情況下使用?
編譯器給你的版本有什麼錯誤? – 2012-03-12 14:40:27
大概錯誤是當'Release_Lock'被調用時'oldIrql'未定義?作爲'Get_Lock()',其中'oldIrql'被聲明,不一定在調用'Release_Lock()'的同一個作用域中被調用。 – hmjd 2012-03-12 14:46:41
我檢查過的範圍是一樣的 – 2012-03-12 14:47:46