2012-04-18 61 views
1

我已經在C++/MFC中實現了一個名爲GDAL的庫,該項目還實現了gdiplus來繪製位圖。所以簡而言之:我在一個類中封裝了一切,它需要一些int,string和其他相當常見的類型,並返回一些這些類型加上一些gdiplus :: Bitmap。所有這些都很好地包裝在.dll和.lib中。MFC類到C#

所以現在我想在C#項目中使用這個庫來使用表單的所有功能。

我搜索了整個interweb的答案,但找不到任何非常具體的教程和其他有用的文檔。

但有一種解決方案引起了我的注意,但沒有很好地描述,它是C++/clr包裝。我創建了一個C#作爲引用被接受的函數,但它並不允許我實例化該類,也不會看到名稱空間或任何與低谷特性相關的東西。

如果有人能幫助我走下這條路,或給我一個類似的好的,將不勝感激。

+1

不能使用C++ C#項目中的類。你可以讓你的圖書館COM對象? – Flot2011 2012-04-18 15:27:19

+1

對於使用「interweb」這個術語來說,你應該被低估爲默默無聞。 – 2012-04-18 15:27:40

+0

@ Flot2011 - 如果我是你,我會讓你的評論給出答案,因爲它是答案:-) – 2012-04-18 15:44:38

回答

1

您不能在C#項目中使用C++類。

您有兩種選擇。

第一種方法是在VC++中創建一個託管包裝,它將創建一個託管類訪問非託管類並將 調用聚合到該類上的各種屬性/方法。

看到這個article如何做到這一點

一旦你的包裝,你可以設定一個基準,然後用你的 從C#類。

第二種方法是將MFC對象包裝在COM對象中。 你將不得不定義你的接口,然後創建類工廠,然後實例化對象......它更「面向對象」,但它是很多工作,請參閱tutorial

+0

將COM讓我在C#中使用我的類還是僅使用函數? – 2012-04-18 17:25:34

+0

@LeonCantin您將可以使用您的課程。 – lorond 2012-04-18 17:45:15

+0

優秀!任何人都有良好的COM文檔?我只能找到與我的無關的mathers的非常具體的教程。 – 2012-04-18 17:55:18