程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 cpp 中使用 mexCallMATLAB大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 cpp 中使用 mexCallMATLAB?

开发过程中遇到在 cpp 中使用 mexCallMATLAB的问题如何解决?下面主要结合日常开发的经验,给出你关于在 cpp 中使用 mexCallMATLAB的解决方法建议,希望对你解决在 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 (将#修改为@)

@H_450_61@

大佬总结

以上是大佬教程为你收集整理的在 cpp 中使用 mexCallMATLAB全部内容,希望文章能够帮你解决在 cpp 中使用 mexCallMATLAB所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。