開發環境:
visual studio 2013+win10
一:建立c++專案
在vs中建立c++project(win32 project),需要注意的是,要勾選:
additional options:export symbols
在專案標頭檔案中放入**:12
3#define waocvdll_api __declspec(dllexport)
// 自定義方法
extern_c waocvdll_api
int
_stdcall fit(
int
width,
int
height, wchar_t*image,
float
*firstpoint,
int
pointslength);
然後再cpp檔案中實現該方法:12
34waocvdll_api
int
_stdcall fit(
int
imagewidth,
int
imageheight, wchar_t*image,
float
*firstpoint,
int
pointslength)
ps:waocvdll_api 因各自專案不同而不同
在編譯之前需要設定專案屬性:
c/c++ --> advanced --> compile as:compile as c++ code
ps:c++專案的平台結構一定要和呼叫專案的一致(若是x64就都是x64,反之亦然)。
ok,build專案,得到dll
二:建立呼叫專案(c#控制台)
呼叫時需要注意的是:12
[dllimport(
@"你的dll存放路徑"
, entrypoint =
"c++中定義的方法名字"
)]
extern
static
unsafe
int
fit(
int
width,
int
height,
char
* image,
float
* firstpoint,
int
pointslength);
之後就是在c#中呼叫非託管**了,需要注意的是:
1.設定專案屬性:allow unsafe code
2.**中新增unsafe**塊
ok,執行控制台專案,專案正常執行!
關於C 的dllexport和dllimport
dllexport和dllimport均是對c 對dll動態庫中的匯出類進行處理的。在dll中為匯出類,在呼叫dll工程的exe中為匯入類。declspec dllexport 宣告乙個匯出函式,是說這個函式要從本dll匯出。我要給別人用。一般用於dll中省掉在def檔案中手工定義匯出哪些函式的乙個...
C 呼叫C 庫引數為匯出函式
c 庫的介面定義如下 ifdef testdll exports define testdll api declspec dllexport else define testdll api declspec dllimport endif strmsg 輸入引數,pretmsg 輸出引數 testd...
C 呼叫DLL C 缺失匯出函式
正在折騰directshow輪子.不過已經是第二次編寫相關的dll.正想用c 除錯一下dll.結果報 試圖載入格式不正確的程式 這裡已經準確設定了目標平台.c 試圖載入格式不正確的程式 所以,dll編譯出來終究還是得用工具測一測,然而depends walker卻因dll結構複雜莫名假死.返璞歸真用...