error C2099: initializer is not a constant错误

时间:2021-11-10 22:49:26
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

22 个解决方案

#1


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;
}

#2


似乎不行啊  还是错误

#3


你参数怎么都不对应就进行强制转换啦?

#4


引用 3 楼 jianwen0529 的回复:
你参数怎么都不对应就进行强制转换啦?



那应该怎么写呢?求指教

#5


引用 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;
}





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

#6


引用 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;
}


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

#7


引用 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;
}


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




我是直接放到里面使用的  error C2099: initializer is not a constant错误

#8


你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

#9


引用 8 楼 piaobotudou 的回复:
你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误

#10


引用 9 楼 a897809 的回复:
Quote: 引用 8 楼 piaobotudou 的回复:

你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误


你那个函数没有实现,或者你没有链接进来。

#11


引用 10 楼 jianwen0529 的回复:
Quote: 引用 9 楼 a897809 的回复:

Quote: 引用 8 楼 piaobotudou 的回复:

你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误


你那个函数没有实现,或者你没有链接进来。


说错了 = = 。不好意思。
我这里编译没有问题,VS2008

#12


目测是你C文件的问题,你尝试在你需要在C文件里面使用的函数(在C++中声明)前加上extern “C"。

#13


引用 11 楼 jianwen0529 的回复:
Quote: 引用 10 楼 jianwen0529 的回复:

Quote: 引用 9 楼 a897809 的回复:

Quote: 引用 8 楼 piaobotudou 的回复:

你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误


你那个函数没有实现,或者你没有链接进来。


说错了 = = 。不好意思。
我这里编译没有问题,VS2008



我的是VC++6.0的

#14


引用 12 楼 jianwen0529 的回复:
目测是你C文件的问题,你尝试在你需要在C文件里面使用的函数(在C++中声明)前加上extern “C"。



需要声明头文件吗?

还是代码保持这样 然后加上extern “C"  就可以了?

#15


#ifndef _cplusplus
extern "C" {
#else

#ifndef _cplusplus 
}
#endif

#endif

这样子试试吧

#16


#else

#ifndef _cplusplus

这之间是你的原本的代码

#17


引用 15 楼 jianwen0529 的回复:
#ifndef _cplusplus
extern "C" {
#else

#ifndef _cplusplus 
}
#endif

#endif

这样子试试吧


恩恩 我一会去试试

#18


引用 16 楼 jianwen0529 的回复:
#else

#ifndef _cplusplus

这之间是你的原本的代码


谢谢大神

#19


引用 16 楼 jianwen0529 的回复:
#else

#ifndef _cplusplus

这之间是你的原本的代码


error C2099: initializer is not a constant错误

还是不行啊

#20


引用 19 楼 a897809 的回复:
Quote: 引用 16 楼 jianwen0529 的回复:

#else

#ifndef _cplusplus

这之间是你的原本的代码


error C2099: initializer is not a constant错误



还是不行啊

那我也无能为力了,我也是新手。

#21


不如你直接把.c文件改为.CPP试试

#22


引用 21 楼 maomingxu13 的回复:
不如你直接把.c文件改为.CPP试试



你的意思是  直接MemoryModule.c 变成 MemoryModule.cpp  ?

#1


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;
}

#2


似乎不行啊  还是错误

#3


你参数怎么都不对应就进行强制转换啦?

#4


引用 3 楼 jianwen0529 的回复:
你参数怎么都不对应就进行强制转换啦?



那应该怎么写呢?求指教

#5


引用 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;
}





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

#6


引用 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;
}


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

#7


引用 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;
}


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




我是直接放到里面使用的  error C2099: initializer is not a constant错误

#8


你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

#9


引用 8 楼 piaobotudou 的回复:
你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误

#10


引用 9 楼 a897809 的回复:
Quote: 引用 8 楼 piaobotudou 的回复:

你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误


你那个函数没有实现,或者你没有链接进来。

#11


引用 10 楼 jianwen0529 的回复:
Quote: 引用 9 楼 a897809 的回复:

Quote: 引用 8 楼 piaobotudou 的回复:

你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误


你那个函数没有实现,或者你没有链接进来。


说错了 = = 。不好意思。
我这里编译没有问题,VS2008

#12


目测是你C文件的问题,你尝试在你需要在C文件里面使用的函数(在C++中声明)前加上extern “C"。

#13


引用 11 楼 jianwen0529 的回复:
Quote: 引用 10 楼 jianwen0529 的回复:

Quote: 引用 9 楼 a897809 的回复:

Quote: 引用 8 楼 piaobotudou 的回复:

你如果要在MemoryModule中使用pVirtualFree的话应该去掉前面的static
加上static表面这个变量仅在当前文件使用,所以链接错误

还是不行啊  

error C2099: initializer is not a constant错误


你那个函数没有实现,或者你没有链接进来。


说错了 = = 。不好意思。
我这里编译没有问题,VS2008



我的是VC++6.0的

#14


引用 12 楼 jianwen0529 的回复:
目测是你C文件的问题,你尝试在你需要在C文件里面使用的函数(在C++中声明)前加上extern “C"。



需要声明头文件吗?

还是代码保持这样 然后加上extern “C"  就可以了?

#15


#ifndef _cplusplus
extern "C" {
#else

#ifndef _cplusplus 
}
#endif

#endif

这样子试试吧

#16


#else

#ifndef _cplusplus

这之间是你的原本的代码

#17


引用 15 楼 jianwen0529 的回复:
#ifndef _cplusplus
extern "C" {
#else

#ifndef _cplusplus 
}
#endif

#endif

这样子试试吧


恩恩 我一会去试试

#18


引用 16 楼 jianwen0529 的回复:
#else

#ifndef _cplusplus

这之间是你的原本的代码


谢谢大神

#19


引用 16 楼 jianwen0529 的回复:
#else

#ifndef _cplusplus

这之间是你的原本的代码


error C2099: initializer is not a constant错误

还是不行啊

#20


引用 19 楼 a897809 的回复:
Quote: 引用 16 楼 jianwen0529 的回复:

#else

#ifndef _cplusplus

这之间是你的原本的代码


error C2099: initializer is not a constant错误



还是不行啊

那我也无能为力了,我也是新手。

#21


不如你直接把.c文件改为.CPP试试

#22


引用 21 楼 maomingxu13 的回复:
不如你直接把.c文件改为.CPP试试



你的意思是  直接MemoryModule.c 变成 MemoryModule.cpp  ?