天書筆記(2) 使用C 開發核心程式

2021-08-26 03:27:16 字數 1416 閱讀 8804

1.使用c介面的標準宣告

在c++中使用c編寫的介面,要在前面加 extern "c"。

extern "c"; extern "c" ntstatus driverentry(pdriver_object driver_object,punicode_string reg_path)

2.過載操作符

void *__cdecl operator new(unsigned int size) return pt; } void __cdecl operator delete(void *p) void __cdecl operator delete (void *p)

3.使用類靜態成員函式

使用c++的時候總是要注意,把乙個類的成員函式當做普通的c函式使用是不對的。至少類的成員函式都知道this指標,而c函式不知道,所以它們的介面實際上是不一樣的。而靜態函式可以,靜態函式呼叫的結果不會訪問或者修改任何物件(非static)資料成員。

下面實現乙個mydriver的類,把分發函式作為虛函式以便於繼承

extern "c"; void *__cdecl operator new(unsigned int size) return pt; } class mydriver static mydriver *d_my_driver;//靜態成員,總是記錄唯一被例項化的mydriver指標 private: //靜態成員函式,用來作為dispatch函式使用 static ntstatus sdispatch(pdevice_object dev,pirp irp); pdriver_object d_driver; } mydriver::mydriver(pdriver_object driver) : d_driver(driver) d_my_driver=this; } ntstatus mydriver::sdispatch(pdevice_object dev,pirp irp) mydriver *mydriver::d_my_driver=null; extern "c" ntstatus driverentry(pdriver_object driver_object,punicode_string reg_path)

**照著書敲得可哥就是沒編譯成功。。。

driver->majorfunction[i]=sdispatch為什麼不直接給我們的ondispatch,因為類成員函式(右)跟普通c函式(左)介面不同,所以又定義了乙個靜態函式,這個靜態函式來作為分發函式的指標,這個靜態函式裡面呼叫虛函式ondispatch(要呼叫這個虛函式因為靜態函式裡面沒有this指標,所以去定義了乙個型別為mydriver*的靜態成員,這等於是乙個全域性公共的指標,只有singleton才可以這樣做),以便我們派生。

使用Assembly來開發c 程式

什麼是assembly 程式集 assembly是乙個包含來程式的名稱,版本號,自我描述,檔案關聯關係和檔案位置等資訊的乙個集合。在.net框架中通過assembly類來支援,該類位於system.reflection下,物理位置位於 mscorlib.dll。assembly能幹什麼?我們可以通過...

使用Assembly來開發C 程式

什麼是assembly 程式集 assembly是乙個包含程式的名稱,版本號,自我描述,檔案關聯關係和檔案位置等資訊的乙個集合。在.net 框架中通過assembly類來支援,該類位於system。reflection下,物理位置位於mscorlib.dll。assembly能幹什麼?我們可以通過a...

使用C 開發Windows服務程式

microsoft windows 服務能夠建立在它們自己的 windows 會話中可長時間執行的可執行應用程式。這些服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何使用者介面。這使服務非常適合在伺服器上使用,或任何時候,為了不影響在同一臺計算機上工作的其他使用者,需要長時間執行功能...