我們的乙個c#專案需要呼叫c++的dll,通過pinvoke進行方法呼叫。其中的乙個方法及其引數的定義是這樣的:
[structlayoutattribute
(layoutkind
.sequential)]
public
struct
xvid_gbl_info_t
[dllimportattribute(
"xvidcore
", entrypoint ="
xvid_global")]
public
static
extern
intxvid_global(
intptr
handle,
intopt,
refxvid_gbl_info_t
param1,
intptr
param2);
在做demo時,一切正常,而且在測試的7臺電腦上均能正常執行。
但到正式專案中,完全一樣的呼叫模式,卻有3臺電腦正常執行,4臺電腦執行到該方法時就報錯:「有未處理的異常,堆已損壞。」
昨天晚上搞到半夜,仍然是如此,奇怪!希望有大俠能指教一二,感激不盡。
注:問題已經解決,原因是不能呼叫靜態方法和成員,如果先呼叫了靜態方法和成員,再呼叫pinvoke上面的方法,在某些機器上就會丟擲異常。但是為何會這樣奇怪了?不得其解。
使用平台呼叫(P Invoke)
使用平台呼叫 p invoke,它的全名叫平台呼叫 platform invoke 用於呼叫dll 中實現的非託管的單調 flat 程式設計介面,被稱為使用c或c 呼叫約定 calling conventions 最有名的例子是win32 程式設計介面,這是乙個巨大的庫,它公開了windows 所有...
平台呼叫P INVOKE 一 基礎篇
平台呼叫技術 p invoke 主要用於處理在託管 中呼叫c c 庫函式及win32 api函式等非託管函式的情形 一 基本要素 乙個簡單例子 c 宣告 extern c declspec dllexport int multiply int factora,int factorb 實現 int m...
C 高階與初心 (二)P Invoke平台呼叫
最近某個專案要採集交易終端的資訊用於監管,主要廠商給出了api,c 版的。開啟hard模式!c 呼叫c 的dll基本就兩種方法 加乙個vc 專案包一層,或者使用p invoke 平台呼叫 前者對於純c 的客戶端來說,增加了複雜性。那就只剩下平台呼叫了。使用平台呼叫的過程比較艱辛,主要遇到了兩個問題 ...