2013-09-16 111 views
1

我想出口一些C++代碼在C項目... 其實我堅持了以下問題:C:編譯C++代碼用C

_CreateToolhelp32Snapshot fnCreateToolhelp32Snapshot = (_CreateToolhelp32Snapshot) GetProcAddress(GetModuleHandleA(L"kernel32"), "CreateToolhelp32Snapshot"); 
_Thread32First fnThread32First = (_Thread32First) GetProcAddress(GetModuleHandleW(L"kernel32"), "Thread32First"); 
_Thread32Next fnThread32Next = (_Thread32Next) GetProcAddress(GetModuleHandleW(L"kernel32"), "Thread32Next"); 

我節省內存在C語言編程三個對象的三種功能(「CreateToolHelp32Snapshot函數」,「Thread32First」和「Thread32First」)地址...我使用MinGW的Ubuntu 13.04下編譯,我得到這個錯誤:

(row 1): error: initializer element is not constant 
(row 2): error: initializer element is not constant 
(row 3): error: initializer element is not constant 

我知道在C中,地址函數不被視爲常量值,但會很有幫助,找到方式t Ø解決此約束...

預先感謝任何建議...

+3

'GetProcAddress的(GetModuleHandleW(L 「KERNEL32」), 「Thread32First」);'等是Win32 API函數,我不認爲你有任何運氣在Ubuntu編譯此。 –

+1

請顯示一些真實的代碼,*實際*和*未經編輯的*錯誤,並指出錯誤代碼在哪裏。並請*編輯您的問題*做到這一點,不要發表評論。 –

+0

我真的沒有看到任何東西,這是特定的C++。 – greatwolf

回答

1

您必須使用全局變量。在其他地方使用之前,使用初始化函數來設置這些值。在標準c中,在輸入main之前,您不能執行代碼(如調用GetProcAddress函數)。

_CreateToolhelp32Snapshot fnCreateToolhelp32Snapshot; 
_Thread32First fnThread32First; 
_Thread32Next fnThread32Next; 

void initialize() 
{ 
    fnCreateToolhelp32Snapshot = (_CreateToolhelp32Snapshot) GetProcAddress(GetModuleHandleA(L"kernel32"), "CreateToolhelp32Snapshot"); 
    fnThread32First = (_Thread32First) GetProcAddress(GetModuleHandleW(L"kernel32"), "Thread32First"); 
    fnThread32Next = (_Thread32Next) GetProcAddress(GetModuleHandleW(L"kernel32"), "Thread32Next"); 
} 

int main() 
{ 
    initialize(); 
    ... 
} 
+0

非常感謝,它的作品..... –