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#定義了。最後,需要注意的時,儘量去掉不必要的頭文件,以減小生成尺寸。