VC编译错误:Cannot use __try in functions that require object unwinding

本文探讨了在C++中使用__try/__except进行异常处理时遇到的errorC2712错误,并提供了解决方案,即将异常处理代码放入独立函数中。此外,还介绍了使用MiniDumpWriteDump函数记录崩溃信息的方法。

误提示:error C2712: Cannot use __try in functions that require object unwinding

代码段:

......

__try {
  RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL);
   } __except(...){}

......

解决办法,将异常捕获的代码段放到一个单独的函数中,即:

Catchept()

{

__try {
  RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL);
   } __except(...){}

}

然后调用:

......

Catchept();

......

 

详细参看:http://www.cppblog.com/jolleydtan/archive/2008/06/11/52843.html

error C2712: Cannot use __try in functions that require object unwinding

游戏中经常会出现崩溃地址的情况,这让我很恼火,在网络上面看到了一些处理方法,主要有这几种: 1)map file,2) crashFinder,3)BoundsChecker,4)dump文件,主要是这些信息,现在主要说明第四种方法的处理.

这种方法主要是用一个MiniDumpWriteDump函数将信息写入到dmp文件里面去,以及系统的宏__try,和__except.在__except里面就进行异常的处理-写MiniDumpWriteDump函数.

今天在写好了一个小demo之后,想将他移植到游戏工程里面去的时候,发现一个很诡异的做法:

error C2712: Cannot use __try in functions that require object unwinding

感觉很惊讶,

后来在网络上面查找了一些资料,主要涉及到几个点:命令参数(GX,SEH,EHSc),

GX-允许异常处理.SEH-结构化异常处理,EHSc-

http://msdn.microsoft.com/en-us/library/1deeycx5(VS.80).aspx

详细的情况请查阅MSDN.

因为这样C++和SEH的东西(__try/__except)不能混淆起来,所以将他在另外一个函数里面给出来.

http://www.codeguru.com/forum/archive/index.php/t-199810.html

http://www.codeproject.com/KB/cpp/exception.aspx

http://msdn.microsoft.com/en-us/library/xwtb73ad(VS.80).aspx

 

 

使用 Webpack 或 Uni-app 插件时,如果遇到 `TypeError: Cannot set property '__webpack_require_UNI_MP_PLUGIN__' of undefined` 错误,通常是由于构建配置或插件版本不兼容引起的。以下是解决此类问题的几个有效方法: 1. **检查插件版本兼容性** 确保所使用的 Uni-app 插件与当前 Webpack 版本兼容。如果插件版本过旧,可能会导致与 Webpack 的模块加载机制不兼容,从而引发 `__webpack_require__` 相关错误。可以尝试更新插件至最新版本或使用与当前 Webpack 版本匹配的插件版本[^4]。 2. **清理 node_modules 并重新安装依赖** 有时候,旧版本的依赖文件可能残留在 `node_modules` 中,导致模块加载失败。可以尝试删除 `node_modules` 文件夹以及 `package-lock.json`,然后重新运行 `npm install` 来安装干净的依赖包[^4]。 3. **修改 Webpack 配置文件** 在 Webpack 配置中,确保正确地引入并配置了 Uni-app 插件。例如,在 `webpack.config.js` 中添加以下代码片段,确保插件被正确加载: ```javascript const UniAppPlugin = require('uni-app-compiler/webpack'); module.exports = { // ... plugins: [ new UniAppPlugin({ // 配置选项 }), ], // ... }; ``` 4. **检查构建工具链是否完整** 确保项目中所有必要的构建工具(如 Babel、Loader 等)均已正确安装并配置。缺少某些构建工具可能导致模块解析失败,进而引发 `TypeError` 错误。 5. **升级 Webpack 和相关依赖** 如果上述方法均无效,可以尝试升级 Webpack 及其相关依赖至最新版本。新版本通常会修复已知的兼容性问题,并提供更好的支持[^4]。 ### 示例 Webpack 配置片段 ```javascript const path = require('path'); const UniAppPlugin = require('uni-app-compiler/webpack'); module.exports = { entry: './src/main.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, module: { rules: [ { test: /\.js$/, loader: 'babel-loader', options: { presets: ['@babel/preset-env'], }, }, { test: /\.vue$/, loader: 'vue-loader', }, ], }, plugins: [ new UniAppPlugin({ // 插件配置 }), ], }; ``` ### 总结 通过检查插件版本、清理依赖、调整 Webpack 配置以及升级构建工具,可以有效解决 `TypeError: Cannot set property '__webpack_require_UNI_MP_PLUGIN__' of undefined` 错误。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值