c 呼叫dll報錯 嘗試讀取或寫入受保護的內容,這通常指示其他記憶體已損壞。如何解決這個問題?

時間 2021-06-06 08:58:20

1樓:羊牮

1. c#只能呼叫c函式,所以你的c++要保證extern "c",這樣的話,就沒什麼bool&。要麼是指標,要麼不是。

2. c++的指標引數,你要確定它只操作乙個單位,還是整個陣列。如果是陣列,你需要傳遞非託管記憶體的指標。不是ref就可以的。

3. 字串比較特殊,除了上面的方法,還可以用string 或者stringbuilder,前者輸入,後者用來做輸出。

2樓:kevin

C#第3個引數寫錯了,從c++引數來猜測,這應該是乙個需要指向乙個記憶體塊首位址的輸出引數,你現在這種 C#宣告,只把它指向了乙個位元組,只要c++程式中,往裡面寫了超過乙個位元組,肯定要出問題。

第3個引數,改一下:

int process(ref short pin, int len,bytepout, ref int outlen ,long filepos,ref bool flag)

記住在呼叫的時候,先 new 乙個byte傳進去,大小根據程式需要,例如:

var pout=new byte[1024];

process(ref pin, 1024, pout, ref outlen ,filepos,ref flag)

求問c 跨庫(dll)呼叫vector 自定義結構體 該怎麼寫?

張三瘋 vector只能用於內部實現,不能在介面中呼叫 如有可考慮用C實現,如傳入乙個指標的指標,然後在內部分本配記憶體,將資料複製過去,呼叫介面者要負責釋放記憶體,如釋放記憶體太複雜,則提供乙個釋放記憶體的函式以供使用者呼叫 ikkiz 別這麼幹!別這麼幹!別這麼幹!即使你非常明白會發生什麼能夠規...

C 如何呼叫python3?

關心細節的魔鬼 據說ironpython可以做到 但是visual studiof的python外掛程式居然不直接支援ironpython,很詭異 北海若 using System using System.Collections.Generic using System.Linq using Sy...

vs2019 c 開發的dll可以給vs2010開發的exe呼叫嗎?

向陽 首先第乙個問題,要明確dll裡面匯出的函式有哪些修辭 extern C 僅此?並不,dll匯出函式應該都是 stdcall的。ok,看我們保證了什麼東西一致 活動記錄布局和符號名。有了這兩個,就可以保證用VS2019 GCC9.x這些編譯的dll給VC 6.0這種大學特配軟體寫的程式用。當然你...