1

我正在尝试在 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”)的内存地址......我在 Ubuntu 13.04 下使用 mingw 进行编译,我得到了这个错误:

(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 中,地址函数不被视为常量值,但会非常有助于找到解决此约束的方法...

提前感谢您的任何建议...

4

1 回答 1

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();
    ...
}
于 2013-09-16T14:18:02.430 回答