2013-09-16 4 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"); 

Я сохраняю память адрес трех функций ("CreateToolhelp32Snapshot", "Thread32First" и "Thread32First") в трех объектов в программировании C ... Я компиляции с 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 

I знайте, что в C функция адреса не считается постоянными значениями, но будет очень полезно найти способ t О разрешить это ограничение ...

Заранее спасибо за любые предложения ...

+3

'GetProcAddress (GetModuleHandleW (L "kernel32"), "Thread32First");' и другие функции API Win32, и я не думаю, что вы будете иметь никаких удачи компиляции это в Ubuntu. –

+1

Пожалуйста, покажите некоторый реальный код, * актуальные * и * неотредактированные * ошибки, и укажите, где в коде эти ошибки. И пожалуйста * отредактируйте свой вопрос *, чтобы сделать это, не публикуйте его как комментарий. –

+0

На самом деле, я не вижу ничего такого, что имеет значение C++. – greatwolf

ответ

1

необходимо использовать глобальные переменные. Используйте функцию инициализации для установки этих значений, прежде чем использовать ее в другом месте. В стандарте c вы не можете выполнить код (например, вызвать функцию GetProcAddress) до входа в main.

_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

Спасибо, он работает ..... –

Смежные вопросы