作者etrexetrex (moonet)
看板C_and_CPP
標題[問題] vs2005用CLR win Form和win32主控台的include設定問題
時間Tue Dec 29 21:28:04 2009
遇到的問題:
我建兩個專案,分別是
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