[問題] 關於vc++和matlab的資料傳遞

看板C_and_CPP (C/C++)作者 (無敵鐵金肝)時間14年前 (2012/05/28 11:36), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++呼叫Matlab引擎 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenCV 問題(Question): 想將經過Matlab運算後的結果傳回VC++ 餵入的資料(Input): Q矩陣、b向量 預期的正確結果(Expected Output): 得到x向量 錯誤結果(Wrong Output): 無法傳回運算結果 程式碼(Code):(請善用置底文網頁, 記得排版) double *vector_x; Engine *ep; mxArray *H; mxArray *b; mxArray *new_block_size; H = mxCreateDoubleMatrix(35, 35, mxREAL); b = mxCreateDoubleMatrix(1, 35, mxREAL); new_block_size = mxCreateDoubleMatrix(1, 35, mxREAL); memcpy((void *)mxGetPr(H), (void *)Q, sizeof(Q)); memcpy((void *)mxGetPr(b), (void *)vector_b, sizeof(vector_b)); engPutVariable(ep, "Q", H); engPutVariable(ep, "b", b); engEvalString(ep, "[x,f_out]=quadprog(Q,b,[],[],Aeq,beq,lb,ub);"); (Aeq、beq、lb、ub都給予值且經過檢查正確) new_block_size = engGetVariable(ep, "x"); vector_x = mxGetPr(new_block_size); 補充說明(Supplement): memcpy的Q和vector_b是VC已經算好要丟到Matlab處理的資料 new_block_size一直抓不到運算完的結果x google相關資料,有看到engGetArray這個函式 但是在新版的Matlab中已經不使用此函式,而用engGetVariable來替代 輸出的x應為一(1*35)大小的陣列 麻煩各位幫我看一下到底是哪裡出錯了,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.3.111

05/28 12:08, , 1F
Q 和 vector_b 的宣告是 ?
05/28 12:08, 1F

05/28 12:09, , 2F
都是CvMat
05/28 12:09, 2F

05/28 12:13, , 3F
那該確定 memcpy 第三個參數,sizeof(Q/vector_b)驗證一下.
05/28 12:13, 3F

05/28 12:19, , 4F
驗證過了,size沒有問題 有符合H和b的大小
05/28 12:19, 4F

05/28 12:23, , 5F
阿!感謝E大好像真的有點問題!!謝謝!
05/28 12:23, 5F

05/28 12:28, , 6F
<還好有補,不然想半天..想說struct cvMat只是包pointer>
05/28 12:28, 6F
文章代碼(AID): #1FmlBDdD (C_and_CPP)
文章代碼(AID): #1FmlBDdD (C_and_CPP)