C#進行平臺調用時利用C++頭文件的小技巧

C#進行平臺調用時利用C++頭文件的小技巧

 

我正好在做一個控件,其中需要引用WinXP自帶的UxTheme.dll,因爲我想生成一個純粹的C#程序,而不是利用Manage C++來成一個託管類的動態庫來作爲C#程序的基礎,因此想到需要轉換定義。

UxTheme.dll共有47個命名函數,找到VC7(我使用VS2003)中的對應頭文件UxTheme.h,在UltraEdit32這個工具中很方便地替換生成了C#進行平臺調用的代碼。問題是這些函數大都使用了一些常量定義,在VC7的頭文件是Tmschema.h,而且它全部使用宏,KAO,如果要手工轉的話,那是一件巨大的工作量。

我想到必須要有一個C/C++頭文件宏擴展工具,在網上找了一下,沒有找到。不過也還是找到了一個解決辦法。以VC7爲例,首先建一個最簡單的項目——控件臺應用,因爲它沒有多餘的東東。然後將你不需要的全部刪掉,看下圖

其中hh.cpp只有最簡單的代碼

#include "11.h"

#using <mscorlib.dll>

 

using namespace System;

 

int _tmain()

{

 

    return 0;

}

11.h則更簡單,只有一句,它包括你需要擴展的頭文件

#include <tmschema.h>

這樣一個相當簡單的C++程序就完成了。接下來我們需要的只是設置一下這個項目的編譯屬性。你需要找到C/C++屬性裏的預編譯頭設置如下圖設定就可以了

然後生成這個項目,找到以.i結尾的文件,是不是一個完整的已擴展的C++代碼出來了,下面的你只需要用查找替換工具,很容易就以轉成C#定義了。最後,需要注意的時,儘量去掉不必要的頭文件,以減小生成尺寸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章