我試圖在C#項目中使用LAME中的lame_enc.dll文件,但添加這個東西似乎是不可能的。將C++ DLL添加到C#項目
我不斷收到一個錯誤,指出無法添加引用,請檢查該引用是否可訪問,有效的程序集或COM組件。
我沒有C++的經驗,但我想使用的功能。現在我使用.NET框架中的Process
來調用lame.exe並執行其他操作,但是我想知道是否有其他方法。
我試圖在C#項目中使用LAME中的lame_enc.dll文件,但添加這個東西似乎是不可能的。將C++ DLL添加到C#項目
我不斷收到一個錯誤,指出無法添加引用,請檢查該引用是否可訪問,有效的程序集或COM組件。
我沒有C++的經驗,但我想使用的功能。現在我使用.NET框架中的Process
來調用lame.exe並執行其他操作,但是我想知道是否有其他方法。
你必須使用P/Invoke調用從託管代碼非託管的API。
要在C#中使用非託管dll(本機C++),您必須使用DllImport,而不是在visual studio中添加對項目的引用(這就是爲什麼會出現錯誤)。
您只能將託管程序集添加爲託管項目的引用。我通常在這種情況下做的是將其作爲資源添加,而不是「複製本地」設置。這種方式將DLL與您的項目綁定並部署。然後我使用DllImport手動從該DLL中獲取所需的API。
你將需要使用PInvoke來調用你的本地跛腳DLL中的函數。但是,只能調用已導出爲「C」風格的函數。
您可以使用像「的PInvoke互操作助理」工具制定時的PInvoke調用簽名,使從C#調用原生的DLL,這將有助於你:
要添加到這些其他意見,如果你最終不得不製作某種包裝器,那麼全盤使用可能是有用的,並且使用COM可調用的包裝器。這樣,你可以從jscript中調用它:) 如果你在網上搜索LAME COM包裝,你會得到這樣的答案:http://www.mail-archive.com/[email protected]。 tuhs.org/msg02219.html – 2010-05-22 19:53:58