首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:用C编译C++代码

C:用C编译C++代码
EN

Stack Overflow用户
提问于 2013-09-16 21:58:13
回答 1查看 211关注 0票数 1

我正在尝试导出C项目中的一些C++代码...实际上,我遇到了以下问题:

代码语言:javascript
复制
_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编译,得到这个错误:

代码语言:javascript
复制
(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中,地址函数不被认为是常量值,但这将非常有助于找到解决这个约束的方法……

提前感谢您的建议……

EN

回答 1

Stack Overflow用户

发布于 2013-09-16 22:18:02

您必须使用全局变量。在其他地方使用初始化函数之前,请使用初始化函数设置这些值。在标准c中,在进入main之前不能执行代码(如调用GetProcAddress函数)。

代码语言:javascript
复制
_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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18829888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档