2011-03-28 56 views
1

我有一個非託管C++ dll。我打電話從C#(.NET 3.5)這個非託管的DLL的外部方法如何在非託管C++ dll中查找調用者程序集名稱

我正在尋找一種方式來找到魔女C#組件調用我的非託管C++ DLL(在我的C++ DLL)(至少,名字的組件)

當然,我不想將任何附加參數傳遞給方法

在此先感謝

+0

西方邪惡的女巫? – Dynite 2011-03-28 14:40:37

回答

1

最後我找到了解決方案。

我正在尋找一種方法來限制不允許訪問我的非託管dll。所以我爬了我的調用者組裝位置的堆棧跟蹤。

最後,我決定檢查調用者程序集的公鑰標記(找到這種方式)並驗證它。

感謝你的時間和答案...

+0

您能否提供更多信息?你是如何檢查非託管C++程序集中的調用者c#程序集的公鑰標記的?你能給代碼示例嗎? – 2012-08-30 13:56:43

+0

請提供代碼。 – 2012-11-12 18:19:57

+0

以下代碼取出DLL文件的完整路徑和DLL文件的調用者: '炭ownPth [MAX_PATH];' '炭callingPath [MAX_PATH];' 'HMODULE HMODULE = globalHandle;' ' GetModuleFileName(HMODULE,ownPth,(的sizeof(ownPth)));' 'GetModuleFileName(NULL,callingPath,(的sizeof(callingPath)));' 'ownPathStr =的std :: string(ownPth);' ' callingPathStr = std :: string(callingPath);' – utvecklare 2016-02-23 06:49:38

0

你不知道。你的外部方法可以被任何C語言兼容的語言調用,因此Windows和CRT存儲關於CLR語言的額外信息。

1

這需要一趟棧道。在託管代碼中運行良好,這就是代碼訪問安全性的實現方式。 不是在有本地堆棧幀行走時工作得很好。你可以在你的本地代碼中嘗試StackWalk64()。昂貴且不太可能成功,特別是在.NET 4.0中,CLR不再僞造模塊。對非常感興趣警惕幀指針省略優化選項。

不要這樣做,我會說。簡單地通過讓託管代碼傳遞額外的參數來解決問題就容易多了。

相關問題