error C2099: initializer is not a constant错误

虫师银古 2014-07-09 11:49:12
typedef BOOL
(WINAPI
*VirtualFreeT)(
__in LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD dwFreeType
);

static VirtualFreeT pVirtualFree=(VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFreeT");


dongtai.h(21) : error C2099: initializer is not a constant
...全文
663 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
虫师银古 2014-07-11
  • 打赏
  • 举报
回复
引用 21 楼 maomingxu13 的回复:
不如你直接把.c文件改为.CPP试试
你的意思是 直接MemoryModule.c 变成 MemoryModule.cpp ?
maomingxu13 2014-07-11
  • 打赏
  • 举报
回复
不如你直接把.c文件改为.CPP试试
幻夢之葉 2014-07-11
  • 打赏
  • 举报
回复
引用 19 楼 a897809 的回复:
[quote=引用 16 楼 jianwen0529 的回复:] #else #ifndef _cplusplus 这之间是你的原本的代码
还是不行啊[/quote] 那我也无能为力了,我也是新手。
虫师银古 2014-07-10
  • 打赏
  • 举报
回复
引用 16 楼 jianwen0529 的回复:
#else #ifndef _cplusplus 这之间是你的原本的代码
谢谢大神
虫师银古 2014-07-10
  • 打赏
  • 举报
回复
引用 15 楼 jianwen0529 的回复:
#ifndef _cplusplus extern "C" { #else #ifndef _cplusplus } #endif #endif 这样子试试吧
恩恩 我一会去试试
幻夢之葉 2014-07-10
  • 打赏
  • 举报
回复
#else #ifndef _cplusplus 这之间是你的原本的代码
幻夢之葉 2014-07-10
  • 打赏
  • 举报
回复
#ifndef _cplusplus extern "C" { #else #ifndef _cplusplus } #endif #endif 这样子试试吧
虫师银古 2014-07-10
  • 打赏
  • 举报
回复
引用 16 楼 jianwen0529 的回复:
#else

#ifndef _cplusplus

这之间是你的原本的代码




还是不行啊
微型蚂蚁 2014-07-09
  • 打赏
  • 举报
回复
C语言? 要求static VirtualFreeT pVirtualFree=(VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFreeT"); 右值是一个编译期常量 你可以先定义,在程序运行时赋值 例如

#include <windows.h>

typedef BOOL
(WINAPI
 *VirtualFreeT)(
    LPVOID lpAddress,
 SIZE_T dwSize,
 DWORD dwFreeType
 );
static VirtualFreeT pVirtualFree = 0;

int main()
{
    pVirtualFree=(VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFreeT");
    printf("Hello world!\n");
    return 0;
}
虫师银古 2014-07-09
  • 打赏
  • 举报
回复
引用 12 楼 jianwen0529 的回复:
目测是你C文件的问题,你尝试在你需要在C文件里面使用的函数(在C++中声明)前加上extern “C"。
需要声明头文件吗? 还是代码保持这样 然后加上extern “C" 就可以了?
虫师银古 2014-07-09
  • 打赏
  • 举报
回复
引用 11 楼 jianwen0529 的回复:
[quote=引用 10 楼 jianwen0529 的回复:] [quote=引用 9 楼 a897809 的回复:] [quote=引用 8 楼 piaobotudou 的回复:] 你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static 加上static表面这个变量仅在当前文件使用,所以链接错误
还是不行啊 [/quote] 你那个函数没有实现,或者你没有链接进来。[/quote] 说错了 = = 。不好意思。 我这里编译没有问题,VS2008 [/quote] 我的是VC++6.0的
幻夢之葉 2014-07-09
  • 打赏
  • 举报
回复
目测是你C文件的问题,你尝试在你需要在C文件里面使用的函数(在C++中声明)前加上extern “C"。
幻夢之葉 2014-07-09
  • 打赏
  • 举报
回复
引用 10 楼 jianwen0529 的回复:
[quote=引用 9 楼 a897809 的回复:] [quote=引用 8 楼 piaobotudou 的回复:] 你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static 加上static表面这个变量仅在当前文件使用,所以链接错误
还是不行啊 [/quote] 你那个函数没有实现,或者你没有链接进来。[/quote] 说错了 = = 。不好意思。 我这里编译没有问题,VS2008
幻夢之葉 2014-07-09
  • 打赏
  • 举报
回复
引用 9 楼 a897809 的回复:
[quote=引用 8 楼 piaobotudou 的回复:] 你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static 加上static表面这个变量仅在当前文件使用,所以链接错误
还是不行啊 [/quote] 你那个函数没有实现,或者你没有链接进来。
虫师银古 2014-07-09
  • 打赏
  • 举报
回复
引用 8 楼 piaobotudou 的回复:
你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊

微型蚂蚁 2014-07-09
  • 打赏
  • 举报
回复
你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static 加上static表面这个变量仅在当前文件使用,所以链接错误
虫师银古 2014-07-09
  • 打赏
  • 举报
回复
引用 6 楼 piaobotudou 的回复:
[quote=引用 5 楼 a897809 的回复:]

为什么 还是提示错误呢 呜呜 求大神指教啊



#include <stdio.h>
#include <windows.h>

typedef BOOL
(WINAPI
*VirtualFreeT)(
LPVOID lpAddress,
SIZE_T dwSize,
DWORD dwFreeType
);
static VirtualFreeT pVirtualFree = 0;

int main()
{
pVirtualFree=(VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFreeT");
printf("Hello world!\n");
return 0;
}


我自己编译过了没有错误,你提示的是什么错误?[/quote]



我是直接放到里面使用的
微型蚂蚁 2014-07-09
  • 打赏
  • 举报
回复
引用 5 楼 a897809 的回复:
为什么 还是提示错误呢 呜呜 求大神指教啊

#include <stdio.h>
#include <windows.h>

typedef BOOL
(WINAPI
 *VirtualFreeT)(
    LPVOID lpAddress,
 SIZE_T dwSize,
 DWORD dwFreeType
 );
static VirtualFreeT pVirtualFree = 0;

int main()
{
    pVirtualFree=(VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFreeT");
    printf("Hello world!\n");
    return 0;
}

我自己编译过了没有错误,你提示的是什么错误?
虫师银古 2014-07-09
  • 打赏
  • 举报
回复
引用 1 楼 piaobotudou 的回复:
C语言? 要求static VirtualFreeT pVirtualFree=(VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFreeT"); 右值是一个编译期常量 你可以先定义,在程序运行时赋值 例如

#include <windows.h>

typedef BOOL
(WINAPI
 *VirtualFreeT)(
    LPVOID lpAddress,
 SIZE_T dwSize,
 DWORD dwFreeType
 );
static VirtualFreeT pVirtualFree = 0;

int main()
{
    pVirtualFree=(VirtualFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"VirtualFreeT");
    printf("Hello world!\n");
    return 0;
}
为什么 还是提示错误呢 呜呜 求大神指教啊
虫师银古 2014-07-09
  • 打赏
  • 举报
回复
引用 3 楼 jianwen0529 的回复:
你参数怎么都不对应就进行强制转换啦?
那应该怎么写呢?求指教
加载更多回复(2)

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧