閒暇之餘,記一下筆記!記錄一下c#如何呼叫c++的動態庫(dll).
步驟:addoperate.h
extern _declspec(dllexport) int sum(int a, intaddoperate.cppb);class
addoperate
;
#include "需要設定編譯配置:addoperate.h
"#include
"iostream
"using
namespace
std;
int sum(int a, int
b)
return a +b;
}
a:專案--屬性---賠指數型--常規---配置型別---動態庫(.dll)
b:專案--屬性--配置屬性--c/c++---高階---編譯為---便以為c++**(/tp)
這個活動x64注意,呼叫放c#最好也用這個x64;
然後點選專案--生成,就會看到dll了;
[dllimport("主要是這兩行:calculate.dll
", callingconvention =callingconvention.cdecl)]
extern
static
int sum(int a, int
b);
public
static
void main(string
args) ;numberb is:,the sum is:");
}catch
(exception ex) ");
}console.readline();
}
這個「sum」方法必須跟dll方法名字相同,否則找不到;
接下來看看執行結果:
很尷尬,提示找不到「sum」方法,難道我們的操作有問題。
排查了很久,發現c++方法編譯成dll時,方法名會改變,也是為了安全;
解決方案:
要把c++**轉化成c語言!
就這樣,然後再編譯dll過來,再次執行:
結果:成功
a:對pinvoke函式的呼叫導致堆疊不對稱問題
方法定義加:callingconvention = callingconvention.cdecl
b:未處理system.badimageformatexception,試圖載入格式不正確的程式。 (異常來自 hresult:0x8007000b)
就這樣ok了!。
該怎麼辦,是否是這樣,乙個個宣告引用??
C 基礎篇 this指標
很多程式設計師 c語言基礎不好,結果用了好多年 c 還是知其然而不知所以然,往往經不起別人一問 xx機制怎麼實現的 this 指標就是 c 的基礎機制之一。struct 到class 進化的第一步 設想我們是十幾年前 c 的設計者,從c的 struct 怎麼進化到 c 的 class struct ...
C 基礎概念篇
一.不同進製之間的相互轉換二制,1.二進位制,八進位制,十六進製制轉換成十進位制 採用按權求和 2.十進位制轉換成二進位制,八進位制,十六進製制 連除倒取餘 3.八進位制 0 7 以0開頭,例 065 十六進製制 0 9 a f 0x開頭 例 0xa5 二.變數 1.定義 資料型別 變數名 初始值 ...
C 基礎練習篇
c 的基礎學習 ifdef test 1 花括號的隱蔽性 結果 括號之外無法訪問括號之內的變數 include using namespace std int main void std cout out value out value std endl system pause return 0 ...