怎样让一个项目,编译成32位和编译成64位时用的函数不同?

screen12 2014-10-06 09:35:54
同一个项目,怎样让编译成32位时和编译成64位时,代码不同呢?原因是32位需要照顾使用XP系统的,而XP系统中则没有某一个函数。这样一运行就会弹出对话框提示出错。

如果直接分成两个项目,虽然能达到目的,但是太麻烦了。就一个函数不同,其余全部相同。

注意:是编译成32位以后,这个函数直接就没有编译到32位程序中去,如果用if分支判断是否64位系统,然后32位系统和64位系统各执行一个函数是不行的。因为两个函数仍然编译到32位程序和64位程序中去了。只不过不会被执行而已。这样在XP中执行它时,还会弹出“无法定位于。。。。。。。。于。。。。”的提示框。

希望在编译成32位的时候,这个就不进去。
...全文
282 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
screen12 2014-10-07
  • 打赏
  • 举报
回复
引用 10 楼 wangningyu 的回复:
[quote=引用 9 楼 screen12 的回复:] [quote=引用 5 楼 zwfgdlc 的回复:] 动态加载DLL就好了, HMODULE hDll = LoadLibrary("Psapi.dll"); GetProcAddress (hDll,"EnumProcessModulesEx")
这个就调用XP自身的system32目录里的那个psapi.dll吧?还是必须把高版本的psapi.dll拷到安装目录中?[/quote] xp没有这个函数的,VISTA以上才有 你光拷贝PSAPI也会出问题~~ [/quote] 谢谢!最好的方法就是不使用该函数,我已决定,用条件编译的方式,64位就用EnumProcessModulesEx,而32位则用EnumProcessModules,这个函数XP还是有的。这样可以保证没有问题。
汪宁宇 2014-10-07
  • 打赏
  • 举报
回复
引用 9 楼 screen12 的回复:
[quote=引用 5 楼 zwfgdlc 的回复:] 动态加载DLL就好了, HMODULE hDll = LoadLibrary("Psapi.dll"); GetProcAddress (hDll,"EnumProcessModulesEx")
这个就调用XP自身的system32目录里的那个psapi.dll吧?还是必须把高版本的psapi.dll拷到安装目录中?[/quote] xp没有这个函数的,VISTA以上才有 你光拷贝PSAPI也会出问题~~
screen12 2014-10-07
  • 打赏
  • 举报
回复
引用 5 楼 zwfgdlc 的回复:
动态加载DLL就好了, HMODULE hDll = LoadLibrary("Psapi.dll"); GetProcAddress (hDll,"EnumProcessModulesEx")
这个就调用XP自身的system32目录里的那个psapi.dll吧?还是必须把高版本的psapi.dll拷到安装目录中?
dvlinker 2014-10-07
  • 打赏
  • 举报
回复

	typedef struct _TBBUTTON {
		int iBitmap;
		int idCommand;
		BYTE fsState;
		BYTE fsStyle;
#ifdef _WIN64
		BYTE bReserved[6];          // padding for alignment
#elif defined(_WIN32)
		BYTE bReserved[2];          // padding for alignment
#endif
		DWORD_PTR dwData;
		INT_PTR iString;
	} TBBUTTON, NEAR* PTBBUTTON, *LPTBBUTTON;
参考TButton的定义,使用_WIN32和_WIN64这两个宏即可!
lis2012 2014-10-06
  • 打赏
  • 举报
回复
使用宏定义来设定编译环境
encoderlee 版主 2014-10-06
  • 打赏
  • 举报
回复
#ifdef _WIN64
zwfgdlc 2014-10-06
  • 打赏
  • 举报
回复
动态加载DLL就好了, HMODULE hDll = LoadLibrary("Psapi.dll"); GetProcAddress (hDll,"EnumProcessModulesEx")
mbctb 2014-10-06
  • 打赏
  • 举报
回复
引用 3 楼 wangningyu 的回复:
一般XP没有的函数就动态加载DLL调一下咯 WINDOWS默认是向下兼容的,32位的程序在64是可以跑的
这个函数在PSAPI.DLL中,动态加载?我搜索了一下,XP的system32目录中是有这个DLL的,但是可能没有这个函数。在这种情况下,必须把高版本的PSAPI.DLL拷贝到安装目录中?麻烦!
汪宁宇 2014-10-06
  • 打赏
  • 举报
回复
一般XP没有的函数就动态加载DLL调一下咯 WINDOWS默认是向下兼容的,32位的程序在64是可以跑的
screen12 2014-10-06
  • 打赏
  • 举报
回复
我看明白了,应该是用条件编译,这样的: #ifdef XXX 。。。。。。 #else 。。。。。。 #endif 其中XXX就是编译成64位时定义的变量。请问,一个项目编译成64位时和编译为32位时,定义的变量有什么不同呢?
screen12 2014-10-06
  • 打赏
  • 举报
回复
我依稀记得有个什么条件编译,好象符合我的要求,只是具体格式记不清了。当编译成32位和编译64位时,什么变量不同呢?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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