我正在尝试导出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中,地址函数不被认为是常量值,但这将非常有助于找到解决这个约束的方法……
提前感谢您的建议……
发布于 2013-09-16 22:18:02
您必须使用全局变量。在其他地方使用初始化函数之前,请使用初始化函数设置这些值。在标准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();
...
}https://stackoverflow.com/questions/18829888
复制相似问题