1. 程式人生 > >如何將一個C++程式碼工程轉換為matlab的mex檔案直接呼叫呢

如何將一個C++程式碼工程轉換為matlab的mex檔案直接呼叫呢

1)首先我們要寫一個介面函式mexFunction(),這個介面函式就是類似C++的main函式,它是入口函式,傳遞引數給我們的C++函式。

#include "mex.h" //mx函式,mex函式用到的標頭檔案

#include "exp.h"//呼叫函式用到的標頭檔案

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
    char *buff;
    int M,N,state,len;
    //if (nlhs>1)
        //mexErrMsgTxt("Too many output argument!");
    if (nrhs!=1)
        {
            mexErrMsgTxt("Must have two input argument!");
        }
    //prhs[0] = mxCreateString(a);
    M = mxGetM(prhs[0]);//獲得輸入引數的行
    N = mxGetN(prhs[0]);//獲得輸入引數的列
    len = M*N+1;
    buff = (char*)mxCalloc(len,sizeof(char));//申請記憶體空間,mxCalloc類是C語言的Calloc
    state = mxGetString(prhs[0],buff,len);//把prhs[0]由mxArray型別字元轉換為char型別
    if (state!=0)
        mexWarnMsgTxt("Not enough space. String is truncated.");
    print(buff);//呼叫寫好的C++函式,我們傳遞的是字元指標
}

2)接下來寫C++函數了,記住C++函式要單獨一個CPP檔案,這樣有利與之後的mex檔案編譯。

//print.cpp
#include "exp.h"
#include "mex.h"
void print (char *a)
{
   
    mexPrintf ("%s jiangfeng\n",a);
    Array();//函式的巢狀呼叫
}
//Array.cpp
#include "exp.h"
void Array()
{
    int i,a[10]={1,2,3,4,5,6,7,9,8,0};
    for (i=0;i<10;i++)
    {
        mexPrintf ("%d ",a[i]);
    }
    mexPrintf ("\n");
    test();//函式巢狀呼叫
}
//test.cpp
#include "exp.h"
void test()
{
    mexPrintf ("very good !\n");
}
//exp.h
#ifndef EXP_H
#define EXP_H
#include "mex.h"
void print (char *a);

void Array();
void test();

#endif
3)編譯C++程式碼生成mex檔案
mex print.cpp Array.cpp test.cpp mexFunction.cpp
之後產生print.mexa64檔案,這個檔案可以在matlab下直接執行,如:
>>print(‘hello world’)
hello world jiangfeng
1 2 3 4 5 6 7 8 9 0
very good !
>>
如果在mex print.cpp Array.cpp test.cpp mexFunction.cpp 過程中出現下面錯誤,如:


Mex file entry point is missing.  Please check the (case-sensitive)
spelling of mexFunction (for C MEX-files), or the (case-insensitive)
spelling of MEXFUNCTION (for FORTRAN MEX-files).



這種錯誤說明mexFunction()的引數格式不正確,應該嚴格按照格式書寫
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])


well done


相關推薦

如何一個C++程式碼工程轉換matlab的mex檔案直接呼叫

1)首先我們要寫一個介面函式mexFunction(),這個介面函式就是類似C++的main函式,它是入口函式,傳遞引數給我們的C++函式。 #include "mex.h" //mx函式,mex函式用到的標頭檔案 #include "exp.h"//呼叫函式用到的標頭檔

Java一個基本資料型別轉換String的方法及效率比較

把一個基本資料型別轉為字串型別,有三種方法。 假設a是integer型別的資料 方法1:a.toString(); 方法2:String.valueOf(a); 方法3:a+""; 效率比較: 方法1效率最快、其次到方法2、最後才是方法3; 原因: 1.a

java的jar包轉換dll檔案

一、將已經編譯後的java中Class檔案進行打包;打包命令JAR 如:將某目錄下的所有class資料夾全部進行打包處理; 使用的命令:jar cvf test.jar -C com/ . 其中test.jar為要生成的jar包;com/ . 為指定的當前目錄下的資料夾,該資料夾

多維php陣列轉換XML檔案或以字串輸出

<?php // 函式將多維陣列轉換成xml,內部為工廠方法,遞迴 function array_to_XML($obj, $array) { foreach ($array as $k

C語言——輸入一個字符串,連續數字字符轉換數字

一個 [0 fine main span nbsp 輸出 print ont 輸入一個字符串,內有數字和非數字字符,例如: A123cdf 456.78cpc876.9er 849.1 將其中連續的數字作為一個實數,依次存放到一數組a中。例如123存放在a[0],456.

C#LINQ數據集轉換Datatable

c# linq 轉換 C#將LINQ數據集轉換為Datatable1.方法一:(測試可用)//通過一個公共類將LINQ數據集轉換為datatablepublic DataTable LINQToDataTable<T>(IEnumerable<T> varlist){

Unity導出的Eclipse工程轉換AndroidStudio工程

地址 href 其中 gravity sina 選擇 mar armeabi font 步驟:1)將unity項目導出到文件夾: 轉換到安卓平臺,這裏只勾選google android project。然後導出到自己新建的文件夾。 2)打開導出的文件夾,看到如下內容.這是

一個十六進制轉換二進制字符數組的函數

二進制 十六進制 blog class wcc http image 字符數組 筆記 十六進制數轉換為二進制數組的函數HexToBinStr 函數實現: void HexToBinStr(int hex, char *bin_str, int str_size) {

Python解密網易雲音樂.ncm檔案.ncm檔案轉換.mp3檔案,實現隨處播放(另附C++已編譯轉換器)

網易雲音樂把.mp3音樂檔案加密為.ncm檔案,導致不能將下載好的音樂複製到其它裝置或使用非網易雲音樂播放器播放,該程式可將.ncm檔案逆向解密為.mp3檔案並保留最高音質。 另有C++已編譯.exe轉換器,將.ncm檔案拖到.exe上直接執行轉換,生成.mp3檔案在.ncm檔案相同路徑。點選下

java工程轉換Maven工程

1、建立一個Java工程,如下圖所示: 2、選中此工程 -> 右鍵 -> Configure -> Convert to Maven project。出現如下的截圖:   3、點選之後會彈出對話方塊,如下圖所示: 4、直接點

分享四種PDF檔案轉換CAD檔案的方法,總有一個方法適合你

有時候我們會遇到一些設計圖是以PDF檔案形式顯示的,那我們要怎麼樣將這種型別的PDF圖紙轉換成dwg或dxf格式呢? 如今網上的轉換方法特別多,今天小編就給大家盤點一下將PDF檔案轉換成CAD圖紙的4種方法。 迅捷家的幾款辦公軟體就很不錯,無論是CAD編輯器還是轉換器,

C# ASP.NET 轉換int型的方法 很實用

con 一個 不能 問題 sum str .net div return 很多新手在搞c#或者.net開發的時候總會碰到一些小問題,如何知道字符能不能為int型 在這裏我寫了一個小的函數僅供大家參考: /// <summary> /// 判斷

TypeError: Error #1034: 強制轉換類型失敗:無法 &quot;&quot; 轉換 Array。

soft tom cdata rtc project pan urn provide component 1、錯誤描寫敘述 TypeError: Error #1034: 強制轉換類型失敗:無法將 "" 轉換為 Array。 at mx.charts.series:

一個 JavaBean 對象轉化一個 Map

一個 影響 iba [0 全部 調用 intro try acc package com.loan.modules.common.util; import java.beans.BeanInfo; import java.beans.IntrospectionExcep

使用QGIS文本坐標轉換矢量文件

rms toa sel 紅色 its 彈出 bit reg ner 本文主要是說明假設使用QGIS將文本格式的點坐標轉換為矢量文件(如shapefile格式)。所需工具:QGIS所需數據:文本格式的點文件所須要處理的點坐標文件例如以下所看到的,114.2 22.15 1

C#中圖片轉換Base64編碼,Base64編碼轉換圖片

byte[] agen oms ase gef urn for app raw #region 圖片轉為base64編碼的字符串 public string ImgToBase64String(string Imagefilename) {

js json字符串轉換json對象的方法解析

val 一個 例如 str1 其他 全局 man 找不到 json字符串 例如: JSON字符串:var str1 = ‘{ "name": "cxh", "sex": "man" }‘; JSON對象:var str2 = { "name": "cxh", "sex":

db2 逗號分隔數據轉換多值IN列表

分隔符 zone 單獨 index anr -a 分類 而是 失敗 將逗號分隔數據轉換為多值IN列表 2010-03-15 11:16:59| 分類: 數據庫技術|舉報|字號 訂閱 下載LOFTER我的照片書 |

指定日期格式20171026100000轉換2017-10-26 10:00:00

正則表達式 linux 日期格式轉換 公司需求: 需要將格式為20171026100000 轉換為2017-10-26 10:00:00易讀取的格式 思路:1、利用正則表達式,將20171026100000轉換成Unix時間戳 2、用date -d @(uni

如何一個PDF文檔拆分多個文檔

pdf拆分 在日常辦公學習中,若遇到一份PDF文檔只需要部分內容,那麽該怎麽把這部分內容拆分或者提取出來呢? 接下來小編就以下編輯器為例,詳細講解文檔拆分與提取的步驟,根據您的不同需求使用不同的方法。拆分文檔第一步打開文檔,點擊編輯器左邊的“導航面板”的“頁”,點擊鼠標右鍵,點擊“拆分文檔”:第二步彈出