大佬教程收集整理的这篇文章主要介绍了在 cpp 中使用 mexCallMATLAB,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
1-testmex.exe 是我们项目的名称,我们的项目发生了异常错误
foreach ($actions as $product_ID => $warehouses) {
$update = 0;
$is_in_stock = false;
foreach ($warehouses as $wh_ID => $qty) {
$stock = Mage::getModel('advancedinventory/stock')->getStockByProductIDAndplacEID($product_ID,$wh_ID);
if (!$stock->getManage_stock() || $stock->getBACkorder_allowed() > 0 || ($stock->getUse_config_setTing_for_BACkorders() && Mage::getStoreConfig("cataloginventory/item_options/BACkorders"))) {
$is_in_stock = true;
}
if ($stock->getManageStock()) {
c = $stock->getQuantityInStock();
$data = array(
"ID" => $stock->getID(),"quantity_in_stock" => $qty_origin + $qty
);
if (!isset($data_from[$product_ID][$wh_ID])) {
/* liNE 152 */ **$data_from[$product_ID][$wh_ID] = 0;**
}
$update -= $data_to[$product_ID][$wh_ID] - $data_from[$product_ID][$wh_ID];
if ($data_to[$product_ID][$wh_ID] != $data_from[$product_ID][$wh_ID]) {
Mage::Helper('advancedinventory/log')->insertRow("Order grID","Assignation updated","O#$order_ID,P#$product_ID,W#$wh_ID ","Assigned qty : " . $data_from[$product_ID][$wh_ID] . " -> " . $data_to[$product_ID][$wh_ID]);
Mage::Helper('advancedinventory/log')->insertRow("Order grID","Qty updated","P#$product_ID,"Qty : $qty_origin -> " . ($qty_origin + $qty));
$stock->setData($data)->save();
}
}
}
抱歉重复了我们的 MEX 文件和项目的名称。但是,如果我们调用任何其他 MEX 文件,仍然会抛出异常错误。
2-如果后面有偶数行
@H_17_5@mexCallMATLAB(1,plhs,1,prhs,"test_R_986_11845@ex");
省略了,还是抛出这个异常错误。
让我们描述整个工作!
步骤 1. 创建一个 matlab 函数如下:
@H_17_5@mexCallMATLAB(1,"test_R_986_11845@ex");
步骤 2. 将其另存为 test.m
步骤 3. 使用 matlab 编码器制作 MEX 文件。它会生成一个 MEX 文件,即 test_R_986_11845@ex.mexw64。
步骤 4. 将 test_R_986_11845@ex.mexw64 放在 C++ 项目文件夹中,即 XYZ。
步骤5. XYZ项目中cpp文件的来源是:
function [y]= test(X)
y = x^2;
end
步骤 6. 成功编译并构建 XYZ 作为 win64 项目。
步骤 7. 运行项目 XYZ。 在线获取异常错误
voID main(){
mxArray* plhs[1];
mxArray* prhs[1];
double *plhs_p,*prhs_p;
prhs[0] = mxCreateDoubleMatrix(1,mxREAL);
prhs_p = mxGetPr(prhs[0]);
plhs[0] = mxCreateDoubleMatrix(1,mxREAL);
cout << "enter number:" << endl;
cin >> prhs_p[0];
mexCallMATLAB(1,"test_R_986_11845@ex");
/*
mxDestroyArray(prhs[0]);
plhs_p = mxGetPr(plhs[0]);
cout << prhs_p[0] << "^2:" << endl;
cout << plhs_p[0] << endl;
mxDestroyArray(plhs[0]);*/
}
如下:
“XYZ.exe 中 0x00000000 处未处理的异常:0xC0000005:位置 0x00000000000000000 处的访问冲突。”
现在,我们对这个错误感到困惑。
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的在 cpp 中使用 mexCallMATLAB全部内容,希望文章能够帮你解决在 cpp 中使用 mexCallMATLAB所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。