關於C CLI的一點小總結

2021-08-19 19:20:04 字數 850 閱讀 2333

最近在給c++動態庫包皮(知識是嚴肅的,莫笑,hia,hia,hia~),給c#的人用。扒了別人的部落格,節選一點貼出來,忘了從**扒的了,後期慢慢補,先厚顏定為原創吧。宣告,總結的部分不是原創。

總結:有c#及c++背景的人使用c++/cli的必備知識:

1, c++/cli裡的new等於c++裡的new, gcnew等於c#裡的new

2, 原生指標用*表示,託管引用使用^表示

如: stream^ stream = gcnew stream();

3, array^ 等於 system.byte

4, pin_ptr關鍵字能把託管引用轉換為原生指標:

如: pin_ptrpbytes = & bytearray[0];

然後pbytes就可以當作原生的byte* 使用了

等**執行完pbytes的有效範圍,bytearray就會恢復可被gc處理的狀態.

待續...

/**********************************************分割線**********************************************/

補一下心得:

區分c++和c#,可以直接說c#是託管**,c++是非託管**;而cli就是它倆之間的膠水。所以:

1、c++層,應封裝所有非基礎標頭檔案對外不可見,如#include 這種的可以對cli可見,但是,任何第三方的標頭檔案不要暴露出去,做好乙個殼類,對其封裝

2、cli層,每個cli層的 ref 類,c++的類指標作為其成員變數,在 cli 的建構函式中,new 出來對應的 c++類

3、c# 層的函式、記憶體等都可以轉化為 c++ 的指標供其操作,這就需要對應的 馬歇爾變換

sql load的一點小總結

sqlldr userid lgone tiger control a.ctl load data infile t.dat 要匯入的檔案 infile tt.date 匯入多個檔案 infile 要匯入的內容就在control檔案裡 下面的begindata後面就是匯入的內容 into table...

關於MongoDB的一點總結

今天推送引擎註冊在dubbo上的服務總是自動會關閉掉,查了一下發現是system.in.read 的原因,導致自動關閉。但是還是不太明白,別人執行spring的時候,只要啟動以後就不會自動關閉,而我的spring剛啟動就關閉了,找了半天都沒有解決,沒辦法,只好用了最笨的方法 while true 而...

關於演算法的一點總結

分解問題的角度 fix 某一維度,嘗試另一維度上的所有可能 a.可能是array的 i,j pointers,b.可能是矩形的長與寬,c.可能是tree的每乙個subtree,d.可能是情景題的每一對pair 求所有解的,暴力上backtracking吧 如果問最短 最少的,先想bfs dp這對好 ...