问题描述
- C语言_declspec(dllexport)问题
-
_declspec(dllexport) void go()
{void (**p) ()=003cfd74; *p =00101145;
}
我用vs2012编写的时候,()后面我写的003cfd74明明是内存地址啊,为什么都提示“int”类型不能用于初始化“void(**p)()类型的实体啊。小弟新人,求大神帮助啊。
解决方案
declspec(dllexport)的位置问题
declspec(dllexport),__declspec(dllimport)使用问题
_declspec(dllexport)
解决方案二:
直接函数指针赋值,或者你想干什么
解决方案三:
你这样直接赋值毫无意义,可以这样写
typedef void (**PTR)( ) ;
void func(){};
PTR p;
*p= func;
当然你非要给指向函数指针的指针赋值也可以,但是你得类型强转,
void (**p) ()=003cfd74 不是你把一个整形数写成16进制,他就是成为地址了,它本质还是一个数。
可以这样:
typedef void (**PTR)( ) ; //定义类型
int num = 0x003cfd74; // 把这个用来做地址的数,赋值给一个整形
PTR p = PTR(num); 类型强转,这么写骗编译器是可以的,至于能不能用那就呵呵呵
解决方案四:
诡异的用法。。。
int不是指针,更不是函数指针。尽管指针就是一个地址,是个int值,但是两者类型上来说,不一样。
非要直接这么用的话,就必须强制类型转换。就是楼上说的那么改。
解决方案五:
无论你写成十进制、八进制还是十六进制,编译器都认为这是一个普通的数而已(虽然习惯上用十六进制显示指针,但十六进制不是指针的专属进制),要对指针赋值,需要使用强制类型转换
时间: 2024-10-30 00:58:38