首先,我對C++的瞭解有限,我也是新手來進行拼寫。從函數庫中獲取函數
我有一些很老的代碼中有一個圖書館,我們想用C#,但當然是老它在unmanged C++使用。我期待爲lib創建一個C#dll包裝器。所以將來任何想使用代碼的人都可以使用dll。不過,我可以找到如何導出函數做一個pinvoke。我嘗試過dumpbin,但沒有看到任何。或者我只需要從代碼中獲取功能?下面是dumpbin。
首先,我對C++的瞭解有限,我也是新手來進行拼寫。從函數庫中獲取函數
我有一些很老的代碼中有一個圖書館,我們想用C#,但當然是老它在unmanged C++使用。我期待爲lib創建一個C#dll包裝器。所以將來任何想使用代碼的人都可以使用dll。不過,我可以找到如何導出函數做一個pinvoke。我嘗試過dumpbin,但沒有看到任何。或者我只需要從代碼中獲取功能?下面是dumpbin。
你需要做什麼取決於它是什麼樣的圖書館。
這裏小心點。 我一直在做類似的事情,但對於Java。
如果您的C#代碼在64位上運行,那麼您的32位lib將無法加載。 最好的選擇是,如果你能得到源代碼並構建2個新版本,32位和1 64庫。
如果您無法訪問源代碼,則可以創建一個32位可執行文件,該可執行文件調用您的lib並可作爲命令行進程(將其輸出保留在磁盤文件中)調用。在這種情況下,您可以使用來自64位系統的32位代碼。當然,啓動一個新流程會有一些懲罰,但取決於它被稱爲可能被接受的頻率。
那麼,在這種情況下,除了讓C#代碼指向x86以外,別無選擇。然後它都很好。 –
@DavidHeffernan在大多數情況下,終端用戶和系統管理員都無法接受這種情況。我從Java經驗講,但我沒有理由在.NET中思考,它會有所不同。現在大多數人擁有64位操作系統,默認安裝64位運行時環境。您的x86庫不會加載到這樣的系統上,大多數人認爲在64位(虛擬)硬件上安裝32位運行時是不可接受的。 – Gert
32位進程在64位Windows上運行非常漂亮。完全沒有問題。 –