看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: 我建兩個專案,分別是 1.win32 主控台應用程式 2.CLR WindowsForm 應用程式 問題:我include的外部lib在 1 可以正常使用 2 不可以正常使用 (編譯沒過) 1.win32主控台應用程式 為了使用matlab engine,我作了以下設定: 專案/屬性/C/C++/一般/其他include目錄 = C:\MATLAB7\extern\include 專案/屬性/連結器/一般/其他程式庫目錄 = C:\MATLAB7\extern\lib\win32\microsoft\msvc71 專案/屬性/連結器/輸入/其他相依性 = libeng.lib 於是下面的程式可以正常執行 #include <iostream> #include "engine.h" using namespace std; void main(){ Engine *eng; eng = engOpen(NULL); engEvalString(eng, "peaks"); system("pause"); engClose(eng); } 2.CLR WindowsForm 在畫面上畫出一個按鈕,在按鈕裡寫程式 在屬性設定的部分同 1 節錄程式碼: #include "engine.h" 在按鈕內的: Engine *eng; eng = engOpen(NULL); engEvalString(eng, "peaks;"); engClose(eng); 編譯不過 希望得到的正確結果: 希望能在 CLR WindowsForm 正常執行 Matlab 程式跑出來的錯誤結果: 這種錯誤有3個 分別是對 engOpen、engEvalString、engClose 三個函數 error LNK2031: 無法對 "extern "C" int __clrcall engClose(struct vs2005::engine *)" (?engClose@@$$J0YMHPAUengine@vs2005@@@Z) 產生 p/invoke,中繼資料中遺漏呼叫慣例 跟這種錯誤3個 error LNK2028: 無法解析的語彙基元 (0A000011) "extern "C" int __clrcall engClose(struct vs2005::engine *)" 跟這種錯誤3個 error LNK2019: 無法解析的外部符號 "extern "C" int __clrcall engClose(struct vs2005::engine *)" 查了好幾小時查不到解決方法 QQ 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Visual Studio 2005 補充說明: 因為在 win32 那邊可以正常使用 所以我想應該不是屬性設定錯誤的問題 應該是 .net 跟其他外部lib整合上的問題 我在查的時候有看到使用 unsafe{ } 去包住一些 code 的作法 在死馬當活馬醫的情況下我也嘗試以下的code unsafe{ Engine *eng; eng = engOpen(NULL); engEvalString(eng, "peaks;"); engClose(eng); } 不過編譯器看不懂 unsafe 而我在屬性裡面找不到可以控制unsafe功能開啟的選項 (好像C#才有?) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.9.202 etrexetrex:轉錄至看板 MATLAB 12/29 21:30
elfkiller:把 clr:pure 改成 clr 試試 12/30 00:03
etrexetrex:這樣可以 謝謝你 12/30 00:23