能力值:
( LV2,RANK:10 )
|
-
-
2 楼
另外想问下 在VC中有这样的宏定义:#define PASCAL __stdcall, 可加密与解密第二版中说pascal和_stdcall这两种调用约定是不同的,参数传递前者是从左到右,后者是从右到左,可VC似乎把这两者等同了,怎么回事呢?
呵呵,谢谢了!
|
能力值:
(RANK:350 )
|
-
-
3 楼
当初说法太绝对了,除了wsprintf外,还有一些是C调用约定。好像API函数名是小写字母的,大多是C调用约定(没太多验证,仅供参考)。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢kanxue !
另外:
另外想问下 在VC中有这样的宏定义:#define PASCAL __stdcall, 可加密与解密第二版中说pascal和_stdcall这两种调用约定是不同的,参数传递前者是从左到右,后者是从右到左,可VC似乎把这两者等同了,怎么回事呢?
顺便也帮忙解答一下吧,呵呵,THANKS!
|
能力值:
( LV8,RANK:130 )
|
-
-
5 楼
这里只说一下方法,具体结果需要实验确定。
1. #define PASCAL __stdcall,
首先要确定该宏是否有效, VC 的宏经常被一些条件编译选项包围着
所以当你看到一个宏时,它并不一定能起作用。
2. 你可以写个小程序实验一下,把它那句话屏蔽掉, 或者放到自己的头文件等, 预祝你能成功得到答案!
3. pascal 和 _stdcall 调用肯定是不一样的,要不为啥起两个名字呢。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
查了下VC6下的相关宏定义,是这样的
-----------------------------------------
#ifdef _MAC
#define CALLBACK PASCAL
#define WINAPI CDECL
#define WINAPIV CDECL
#define APIENTRY WINAPI
#define APIPRIVATE CDECL
#ifdef _68K_
#define PASCAL __pascal
#else
#define PASCAL
#endif
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
#else
#define CALLBACK
#define WINAPI
#define WINAPIV
#define APIENTRY WINAPI
#define APIPRIVATE
#define PASCAL pascal
#endif
-------------------------------------
由此可见,不同的编绎环境下PASCAL宏代表的调用约定不一样,但不用怀疑的是大写的PASCAL和小写的pascal显然不是同一个意思,另外stdcall和pascal显然不是同一个调用约定,呵呵,我大概清楚了,谢谢各位!
|
|
|