C 如何呼叫C 基礎篇

2022-01-29 13:32:06 字數 1929 閱讀 8595

閒暇之餘,記一下筆記!記錄一下c#如何呼叫c++的動態庫(dll).

步驟:addoperate.h

extern _declspec(dllexport) int sum(int a, int

b);class

addoperate

;

addoperate.cpp

#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 ...