[英]dll export/import problem in visual studio 2010
我寫了一個可視化的c ++ win32控制台應用程序,並在其中進行了測試
win32控制台項目
。 然后我切換到
win32項目
並導入所有源文件並為其創建一個dll。 通過標記我要導出為的類
#define DllExport __declspec( dllexport )
class DllExport theClass {
}
它可以工作並且生成dll。 然后我創建了另一個C#項目,並想將dll添加到項目中。 通過引用->添加引用->瀏覽器。 然后我選擇該dll。 那給我一個錯誤
無法添加對'''''''.dll的引用。 請確保該文件可訪問,並且是有效的程序集或com組件。
有人知道我在哪里錯誤地生成/導入了dll嗎?
謝謝
“添加引用”對話框僅適用於包含元數據(托管代碼)或類型庫(COM服務器)的DLL。 您的DLL不符合要求,您只能在C#代碼中使用[DllImport]屬性來使用P / Invoke編組器來調用非托管DLL入口點。
那不可能是本機C ++類,就像您嘗試做的那樣,沒有可靠的機制來管理代碼分配非托管內存並調用本機C ++類的構造函數(和析構函數)。 由於缺少查找構造函數和析構函數代碼的困難,P / Invoke編組器無法知道對象的大小。 C ++語言不會生成知道此必需信息所需的元數據。
如果要進行P / Invoke,則編寫一個普通的全局函數,該函數用extern“ C”,__ declspec(dllexport)和(可選)__ stdcall裝飾。
如果要導出C ++類,則唯一途徑是使用C ++ / CLI語言並為本機C ++類編寫“ ref類”包裝。
或者,您可以編寫COM協類,即Windows中的通用膠。 .NET很好地支持它,如果您以前從未編寫過COM代碼,則可能不希望這樣做。 ATL是實現目標的最佳方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.