Visual Studio C 軟體用法!

2021-06-17 20:46:35 字數 1843 閱讀 4953

本c#專案案例主要是使用visual studio 2005建立c++和c#混合專案的方法,涉及c#智慧型裝置專案和c++智慧型裝置專案。

通過p/invoke我們可以充分利用已有的非託管資源,使用非託管的系統api函式,以彌補.net compact framework的不完備性。因此我們可以使用c++來編寫非託管的dll函式,然後通過p/invoke在c#中進行呼叫。vs2005提供了乙個很好的整合環境,我們可以使用乙個解決方案同時管理託管的c#專案和非託管的c++專案。下面介紹使用vs2005建立c++和c#混合專案的方法。

2、新增c++智慧型裝置專案。在解決方案「mixedsolution」中新增乙個新的專案,使用c++建立相同平台(如pockent pc 200)的智慧型裝置win32或mfc專案,假定專案名為「cppproject」。注意cppproject必須是win32或mfc的dll專案,因為我們需要使用p/invoke功能實現由c#呼叫c++專案的dll。在c++專案中編寫需要的函式處理後,對要匯出的函式需要進行匯出定義,該函式將被c#的p/invoke呼叫,只有被正確匯出的函式才能被p/invoke識別。這裡值得注意的只有使用修飾符extern 「c」 _declspec(dllexport)修飾的函式才能被p/invoke呼叫。在該修飾符中_declspec(dllexport)表示輸出,即匯出函式的定義;extern 「c」表示該函式使用c編譯方式,可以被c呼叫,p/invoke只能呼叫使用這種方式編譯的函式。

我們可以定義如下符號:

#define dllapi extern "c" __declspec(dllexport) 定義了該符號後,可以使用它來修飾要匯出的函式,如宣告函式myfunction:

dllapi int myfunction(int, int); 宣告了該函式後,在函式的定義部分使用或不使用dllapi修飾都是被允許的。

int myfunction(int, int) //宣告了函式後,在定義部分可以不加修飾符  也可以只給函式定義,而省略宣告部分,這時當然就得加上修飾:

dllapi int myfunction(int, int) //只給出函式定義,必須加上修飾      我們知道,dll本身不僅可以匯出函式,還可以匯出變數和類,但由於p/invoke只能匯入dll中函式的定義,因此這裡只關注函式的匯出。

通過這樣的配置,在啟動專案的除錯(f5)時,會先生成c++專案,即輸出「cppproject.dll」檔案到c#專案所在目錄,然後再生成c#專案。在生成c#專案的過程中,會檢查cppproject.dll是否被更新,如果被更新,則部署到裝置上。這樣修改了c++專案後同樣可以執行啟動除錯來進行整體除錯,不需要再手動去單獨編譯c++專案,以及複製dll檔案了。

5、  c++dll專案的除錯。vs2005提供了多種除錯模式,可以使用本機exe程式來對dll進行除錯,也可以使用託管 exe 中對dll進行除錯。這裡的dll專案最終是要被託管c#呼叫的,因此我們使用由託管c#專案建立的託管 exe來對c++專案dll進行除錯。

按照以上建立智慧型裝置的c++和c#混合專案的方法,我建立了乙個混合專案應用,為c#應用程式增加等待游標(等待動畫)的功能,以向使用者表明程式正在處理,如下圖:

設定等待游標可以使用windows ce的api函式setcursor(loadcursor(null, idc_wait));但實際上idc_wait是乙個巨集,在展開後等於(lpwstr)((dword)((word)(32514))),因此idc_wait是無法直接在c#下使用的,因而要在c#下直接使用這個api函式是非常困難的任務。而通過乙個dll專案間接的使用這條api則非常方便。dll專案向外匯出函式setwaitcursor,這個函式不使用任何引數,可以方便被匯入到c#中。這個函式的定義如下:

void setwaitcursor(void)  相應的c#的匯入定義如下:

詳細請參考:

VisualStudio C 記憶體洩漏的檢測方法

define crtdbg map alloc include include using namespace std void test1 void test2 int main 新增標頭檔案 include在程式退出前,也就是main函式return前,加上 crtdumpmemoryleaks...

Visual Studio C 解決方案另存為

最近在用c 寫幾個的遊戲指令碼,開發平台是visual studio。有些指令碼寫完以後,大部分還可復用,所以想著可不可以另存為整個解決方案,然後在此基礎上繼續開發,這樣更高效。1 首先我們要複製乙份要復用的解決方案。這裡以這個名為qiguan的解決方案為例 2 然後重新命名這個解決方案。這裡就命名...

軟體危機 軟體工程 軟體質量

軟體危機就是軟體在開發和維護過程中所遇到的一系列難以控制的問題。主要表現為 對軟體開發成本和時間估計不准 使用者對已完成的軟體不滿意 軟體不可維護 軟體缺少文件 軟體成本過高 軟體發展速度跟不上硬體發展速度。導致軟體危機的原因有 一,與軟體本身特點有關,缺乏可見性,質量難以評價,規模龐大難以維護 二...