VS中编译64位程序以及遇到的问题(E0000235)

安装64位操作系统不是编译64位程序的必要条件,关键是要装64位程序的编译器。

1. 选择“Build” – “Configuration Manager”菜单,打开配置管理器。点击新建解决方案平台。

2. 选择“x64”平台,点击确定按钮。

3. 这时候配置管理器中的平台已经改成刚才选择的x64了,这时候编译出来的就是64位程序了。可以在工具栏的平台下拉框中快速切换目标平台。

4. 如果在选择平台的下拉列表里找不到x64,可能是没有安装x64编译支持。在VS安装程序里再装上就可以了。


工程配置管理的误区:

在VS2012中如果有多个工程,比如:


其中一个工程设置为X64,且设置为"Set as StartUp Project",这里设置的是WDMInstall工程 如图:

这是编译调试栏显示为:

可以看到这是一个X64的工程,当焦点移到切换到其它工程时比如test工程,编译调试栏还是会显示X64,如图:

这很容易让人误认为test工程也配置的是一个X64工程,其实不然,打开配置管理可以看到:


test工程是一个32位的工程,所以工程的配置还需要通过配置管理器具体配置,不能单从界面来看。

这个误区引发的问题:比如test中有函数SetupDiCallClassInstaller的调用,这里误以为test为X64,编译以后放到win7 64位的系统上,这时SetupDiCallClassInstaller函数调用失败,错误代码E0000235,原因是需要一个64位的程序(SetupDiCallClassInstaller函数对调用它的当前程序有要求的,必须是和系统位数相匹配的程序,比如当前是win7 X64 调用SetupDiCallClassInstaller函数的程序也必须是64位的 如果当前是WIN7 32 调用SetupDiCallClassInstaller函数的程序也必须是32位的 这个具体说来还是WOW64子系统支持不完善,关于WOW64子系统介绍详见:http://blog.csdn.net/whatday/article/details/10899335)如果进入误区认为test产生的就是一个X64的程序,那么这个问题将非常困惑。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用 Java 语言编写的 PL/0 语法分析程序,包括词法分析和语法分析两部分: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class PL0Parser { private BufferedReader reader; private int lookahead; public PL0Parser(String filename) throws IOException { reader = new BufferedReader(new FileReader(filename)); lookahead = reader.read(); } public void parse() throws IOException { program(); reader.close(); } private void program() throws IOException { block(); if (lookahead != '.') { error("期望遇到句号"); } match('.'); } private void block() throws IOException { if (lookahead == 'c') { constDeclaration(); } if (lookahead == 'v') { varDeclaration(); } while (lookahead == 'p' || lookahead == 'c' || lookahead == 'v' || lookahead == 'b') { if (lookahead == 'p') { procedureDeclaration(); } else if (lookahead == 'c') { constDeclaration(); } else if (lookahead == 'v') { varDeclaration(); } else { block(); match(';'); } } statement(); } private void constDeclaration() throws IOException { match('c'); do { ident(); match('='); number(); } while (lookahead == ','); match(';'); } private void varDeclaration() throws IOException { match('v'); ident(); while (lookahead == ',') { match(','); ident(); } match(';'); } private void procedureDeclaration() throws IOException { match('p'); ident(); match(';'); block(); match(';'); } private void statement() throws IOException { if (lookahead == 'i') { match('i'); ident(); match(':'); expression(); match(';'); } else if (lookahead == 'w') { match('w'); expression(); match('d'); statement(); } else if (lookahead == 'c') { match('c'); expression(); match('t'); statement(); if (lookahead == 'e') { match('e'); statement(); } } else if (lookahead == 'r') { match('r'); ident(); match(';'); } else if (lookahead == 'b') { match('b'); block(); match('e'); } } private void expression() throws IOException { if (lookahead == '+' || lookahead == '-') { match(lookahead); } term(); while (lookahead == '+' || lookahead == '-') { match(lookahead); term(); } } private void term() throws IOException { factor(); while (lookahead == '*' || lookahead == '/') { match(lookahead); factor(); } } private void factor() throws IOException { if (lookahead == '(') { match('('); expression(); match(')'); } else if (lookahead == 'n') { match('n'); } else { ident(); } } private void ident() throws IOException { if (lookahead >= 'a' && lookahead <= 'z') { match(lookahead); } else { error("期望遇到标识符"); } } private void number() throws IOException { if (lookahead >= '0' && lookahead <= '9') { match(lookahead); } else { error("期望遇到数字"); } } private void match(int c) throws IOException { if (lookahead == c) { lookahead = reader.read(); } else { error("语法错误"); } } private void error(String message) { System.err.println(message); System.exit(1); } } ``` 该程序的输入为 PL/0 代码文件的路径,输出为语法错误信息或无输出(表示语法分析成功)。使用时只需创建一个 `PL0Parser` 对象并调用它的 `parse()` 方法即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值