可以很容易地使用您提到的P/Invoke Web服務。我試了一下,發現P/Invoke數據庫並沒有完全形成,它可以通過腳本導入。這是而不是以定義的方式構建,所以你要麼想出一些「智能解析」或自己修復錯誤,這將是太多的工作! kernel32.dll已經產生了4000行代碼,更不用說其他數百個庫了。
這就是我迄今爲止所做的,並且將結果放入C#文件時,不能編譯。過濾出「TODO」項目是一回事,但是許多項目也包含語法錯誤,涉及未明確定義的其他結構等等。問題根本在於數據庫沒有任何形式的明確格式。這只是純文本字段用戶可以輸入文本。
使用下面的腳本的結果時,我得到127編譯錯誤。我認爲這是最接近你能得到的。
PInvokeServiceSoapClient client = new PInvokeServiceSoapClient();
client.Open();
foreach (FunctionInfo function in client.SearchFunction("kernel32.dll", new WikiVersion()))
{
Console.WriteLine(function.Function);
try
{
foreach (SignatureInfo signature in client.GetResultsForFunction(function.Function, function.Module))
{
if (signature.Language == "C#")
{
if (!signature.Signature.Contains("TODO"))
{
if (!signature.Summary.StartsWith("TODO"))
{
Console.WriteLine("/// <summary>\r\n/// " + signature.Summary + "\r\n/// </summary>");
}
Console.WriteLine(signature.Signature.Replace("|", "\r\n"));
}
}
}
}
catch { }
}
client.Close();
也許有一天你想出瞭如何創建一個包含所有WinAPI的功能,並作爲一切包裝DLL中的創意。它會很酷!
這聽起來像是[SWIG](http://www.swig.org/)可以照顧的東西?但我知道我對Java的情況並不滿意,所以我想出了一個名爲[JavaCPP]的工具(https://github.com/bytedeco/javacpp)... –
你可以自己寫這個。什麼東西阻止你?基於pinvoke.net的自動生成將是一個壞主意,因爲那裏的內容質量低。 –
我剛剛找到了網絡服務:http://www.pinvoke.net/pinvokeservice.asmx,所以我想我會自己寫,然後在這裏發佈。 'function PInvoke($ module){...}' – Nacht