Я пытаюсь экспортировать код 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 адресные функции не рассматриваются как постоянные значения, но будет очень полезно найти способ разрешить это ограничение …
Заранее спасибо за любое предложение …
Вы должны использовать глобальные переменные. Используйте функцию инициализации, чтобы установить эти значения, прежде чем использовать ее в другом месте. В стандарте 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();
...
}
Других решений пока нет …