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

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

Заранее спасибо за любое предложение …

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();
...
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]