1樓:西井丶
你的方法要out出第一維度多長, 第二維度多長, 猜測你的方法會返回乙個double*
[DllImport("abc.dll")]
private
static
extern
double
*GetDoubles
(blahblahblah
,out
intfirst
,out
intsecond
);然後你需要
double[,] result = new double[first, second]
呼叫這個GetDoubles方法拿到乙個double* ptr
最後 Unsafe.Copy(ref result[0, 0], ptr) 就可以完成複製了
上邊這句只能複製乙個值。。請看下邊的方法
先計算出要複製多少bytes: uint length = (uint)(first * second * sizeof(double));
最後 Unsafe.CopyBlockUnaligned(ref Unsafe.As(ref result[0, 0]), ref Unsafe.
As(ref *ptr), length) 就可以完成複製了
如果你的.NET版本沒有Unsafe這個類的話, 就用System.Buffer + unsafe完成, 如下:
fixed
(double
*resultPtr
=result
)最後囉嗦一句, 記得釋放掉你拿到的double* ptr
C 呼叫C DLL函式,一般怎麼封裝這個DLL?
沒錯,用C CLI。完全可以滿足你的需要。我的C 類中使用了openCV與Qt類。使用C CLI封裝後可以在C 中呼叫無壓力。參考 Keep Learning 這個是最簡單的,可以在他的類上做改動,加入你的類的指標,和相關介面函式。如果有人dll中的類要傳遞Mat型別,可以看這個 http mili...
C 的dll庫,採用動態呼叫更好還是靜態呼叫更好?
單純的淫 動態 shared library,從英文本面意思很明確了,如果你的dll還要給別的pe模組使用,你就用動態dll,這樣不用所有模組都各自包含乙個dll,大家公用乙個dll就行,反正用的時候loadlibrary一下就行。去如果確實就你自己的程式使用,就靜態吧,打包省事兒點。 井底的bee...
c ,如何按照不同的要求呼叫標準庫sort函式排序?
Larry Sean sort函式的第三個引數是可選的,可以填你自定義的比較函式,返回bool型別。這個比較函式會當成小於號用。這樣就可以寫三個比較函式分別比較類中不同的值。如果從小到大就用小於號,從大到小就用大於號。至於怎麼設計,怎麼選擇排哪個,判斷一下調不同的函式就好了。好了,道理都講清楚了,加...