簡體   English   中英

Visual Studio 2010中的dll導出/導入問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM