2012-09-06 101 views
1

首先,我對C++的瞭解有限,我也是新手來進行拼寫。從函數庫中獲取函數

我有一些很老的代碼中有一個圖書館,我們想用C#,但當然是老它在unmanged C++使用。我期待爲lib創建一個C#dll包裝器。所以將來任何想使用代碼的人都可以使用dll。不過,我可以找到如何導出函數做一個pinvoke。我嘗試過dumpbin,但沒有看到任何。或者我只需要從代碼中獲取功能?下面是dumpbin。

enter image description here

回答

2

你需要做什麼取決於它是什麼樣的圖書館。

  1. 如果它是一個靜態庫,那麼您將需要構建一個DLL並將.lib文件鏈接到該DLL。然後你的C#代碼可以調用你建立的DLL。
  2. 如果它是一個DLL的導入庫,那麼你只需直接調用DLL即可。 .lib文件在這裏沒有用處。
0

「的Interop 101」 應該可以幫助您:Part 2使用P/Invoke來調用非託管C++的方法在C#和Part 4使用C++/CLI的橋樑。

1

這裏小心點。 我一直在做類似的事情,但對於Java。

如果您的C#代碼在64位上運行,那麼您的32位lib將無法加載。 最好的選擇是,如果你能得到源代碼並構建2個新版本,32位和1 64庫。

如果您無法訪問源代碼,則可以創建一個32位可執行文件,該可執行文件調用您的lib並可作爲命令行進程(將其輸出保留在磁盤文件中)調用。在這種情況下,您可以使用來自64位系統的32位代碼。當然,啓動一個新流程會有一些懲罰,但取決於它被稱爲可能被接受的頻率。

+0

那麼,在這種情況下,除了讓C#代碼指向x86以外,別無選擇。然後它都很好。 –

+0

@DavidHeffernan在大多數情況下,終端用戶和系統管理員都無法接受這種情況。我從Java經驗講,但我沒有理由在.NET中思考,它會有所不同。現在大多數人擁有64位操作系統,默認安裝64位運行時環境。您的x86庫不會加載到這樣的系統上,大多數人認爲在64位(虛擬)硬件上安裝32位運行時是不可接受的。 – Gert

+0

32位進程在64位Windows上運行非常漂亮。完全沒有問題。 –