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

時間 2021-05-13 08:17:52

1樓:張三瘋

vector只能用於內部實現,不能在介面中呼叫.如有可考慮用C實現,如傳入乙個指標的指標,然後在內部分本配記憶體,將資料複製過去,呼叫介面者要負責釋放記憶體,如釋放記憶體太複雜,則提供乙個釋放記憶體的函式以供使用者呼叫.

2樓:ikkiz

別這麼幹!

別這麼幹!

別這麼幹!

即使你非常明白會發生什麼能夠規避掉各種陷阱呼叫成功不出錯,也別這麼幹!如果你不懂COM,如果你的系統很簡單不想引入額外的複雜度,記住C++沒有ABI跨DLL邊界只用C的方式,可保十年平安。

3樓:

問題太過模糊,沒法下定論。

但你說vector作為IN parameter的時候,程式會crash,這九成是跨堆釋放資源導致的,我盲猜是你編譯選項或者CMAKE中的/MD /MT設定問題,vector的記憶體管理用到了堆空間,用MD生成的DLL檔案,會使用執行緒公用堆空間,不會出現A執行緒的堆空間,B執行緒釋放的情況。而MT就不同了,它link的是C語言的libcmt.lib,不同模組會管理屬於自己的堆空間,這時候如果你要跨模組釋放的話,程式肯定會崩掉。

4樓:競天問

我用MSVC最多,所以只說這個上邊的經驗。

跨DLL進行函式呼叫要保證雙方的ABI是一致的,比如之前不同版本的VC之間的函式生命名規則不一致,所以不同版本VC生成的庫是不能混用的。

我遇到的最多的問題是兩個庫中某個stl元件的構造不一致造成的,這有可能是兩個庫的編譯選項、預定義等不一致,造成同樣都是vector,但是其成員型別和數量不一樣,但是這個情況有些是鏈結器檢測不到的,就有可能造成你這樣的問題。

PS:你問題中的錯字讓我很鬧心啊

求問c語言大神,這個迴圈應該怎麼理解

醉臥沙場 這只是乙個最簡單的二層迴圈,外層迴圈每遞進一次,將內層迴圈從頭到尾執行一遍,直到整個迴圈結束。建議你自己根據邏輯逐一帶入數值自己算一遍,如果這都需要別人掰開揉碎了乙個數乙個數的講,那這個專業不學也罷 波羅學 這種問題沒什麼好理解的。要清楚步驟,一步一步按流程走就好了。給你簡單演示一下,提個...

求問 調參是否能對深度學習模型的效能有極大提公升?

棒棒糖 不用考慮這個問題,在做研究的時候你需要考慮的是怎麼讓這個模型對超引數盡可能的魯棒。對做工程的人來說,更是如此。兩批資料不能用同乙個超參處理的時候簡直是噩夢。 小宋是呢 ZFNet可以去了解一下,處於Alex Net和VGG Net之間的結構,2013年的Image Net冠軍。相較於Alex...

求問,零基礎學c語言看什麼書比較好。。。C語言程式設計 現代方法行嗎?

XMirror C語言從入門到放棄 啊不 C語言從入門到刪庫 啊也不是 C語言從入門到精通 我覺得還好,雖然我只有這一本C語言的教材 pan.baidu.com s 1AqFEs5提取碼 s7b4 上面是學習資料 下面是VC 的安裝包 Setup.zip 下面這是dev C 的非安裝版 Dev Cp...