【发布时间】:2013-09-20 17:07:17
【问题描述】:
我正在尝试在 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 中地址函数不被视为常量值,但会非常有助于找到解决此约束的方法...
提前感谢您的任何建议...
【问题讨论】:
-
GetProcAddress(GetModuleHandleW(L"kernel32"), "Thread32First");和其他是 Win32 API 函数,我认为你在 Ubuntu 中编译它不会有任何运气。 -
请展示一些真实的代码,actual 和 unedited 错误,并指出这些错误在代码中的位置。请编辑您的问题,不要将其作为评论发布。
-
我在这里没有看到任何特定于 c++ 的内容。
-
您必须使用全局变量。在其他地方使用它之前,使用初始化函数来设置这些值。在标准 c 中,您不能在进入 main 之前执行代码(如调用 GetProcAddress 函数)。
-
@JoachimPileborg & Nemanja:MinGW 为 Linux 主机/Windows 目标提供交叉编译器。在 Linux 上编程并使用该交叉编译器来构建 Windows 二进制文件是很常见的。
标签: c++ c memory-address mingw32 initializer