在非託管環境中呼叫託管物件

2021-04-14 02:32:13 字數 892 閱讀 2939

如果要在mfc專案中支援託管擴充套件,可以使mfc工程通過開啟專案的託管擴充套件屬性開關。在開啟託管擴充套件編譯開關以後,你就可以在mfc專案中使用託管物件了,通常的做法是:為每個重要的mfc物件匹配乙個託管物件以形成乙個對偶對,彼此匹配的物件包含指向對方的指標,這樣,其他.net物件可以通過對偶對中的.net物件操作mfc物件;而其他mfc物件可以通過對偶對中的mfc物件操作.net物件。

在visual studio .net 中,沒有提供關於新增託管c++類物件的嚮導,因此,你可以先新增乙個基於託管c++的component物件。

新增了該testdocobject託管元件物件之後,將該物件的基類改為object,並刪除一些**得到乙個最小託管類:(下面是乙個例子)

namespace test

};}

經過以上步驟,visual studio.net生成的**被裝進了mfc程式,當然完全可以手動建立.h檔案和.cpp檔案,輸入相應的**,然後把它們新增到當前工程。在mfc類中使用託管物件,提供物件的宣告和初始化方法與傳統的方法略有不同。以在文件類ctestdoc中新增乙個託管成員變數為例,宣告託管物件的**如下:

public:

gcrootm_ptestdocobj;

gcroot型別安全包裝模板可以將託管參考型別指標作為成員變數嵌入到非託管類中,該變數就可以像其他型別的變數一樣使用了。在ctestdoc的成員函式initialdocument中建立這個物件,**如下:

bool ctestdoc::initialdocument()

由於testdocobject是乙個託管參考型別,它總被分配在clr堆上,所以自然不能使用在afx.h中定義的new操作符來直接初始化該物件以避免該託管物件在非託管的本地c++堆上建立導致的錯誤。在託管物件中宣告mfc物件,與常規方法一致。

託管呼叫非託管的DLL

dllimport createnewprocess.dll charset charset.unicode public static extern bool createprocess marshalas unmanagedtype.lpwstr string fullpath 以上是定義入口,...

託管非託管Dll動態呼叫

最近經常看到有人問託管非託管 dll呼叫的問題。對於動態庫的呼叫其實很簡單。網上很多 都實現了 dll的靜態呼叫方法。我主要談論下動態庫的動態載入。對於託管動態庫,實現動態載入很簡單。files dwwwing dlldemo.rar code assembly.loadfile filepath ...

在VC中呼叫 WebService 非託管

一 使用visual studio.net呼叫webservice 很多次看到討論vc中呼叫webservice的問題,其實在visual studio.net 下稱vs.net 及其以後的版本中呼叫webservice已經變得相當簡單。你所要做的只是 找到 webservice的發布位址 然後將其...