我有一個非託管C++ dll。我打電話從C#(.NET 3.5)這個非託管的DLL的外部方法如何在非託管C++ dll中查找調用者程序集名稱
我正在尋找一種方式來找到魔女C#組件調用我的非託管C++ DLL(在我的C++ DLL)(至少,名字的組件)
當然,我不想將任何附加參數傳遞給方法。
在此先感謝
我有一個非託管C++ dll。我打電話從C#(.NET 3.5)這個非託管的DLL的外部方法如何在非託管C++ dll中查找調用者程序集名稱
我正在尋找一種方式來找到魔女C#組件調用我的非託管C++ DLL(在我的C++ DLL)(至少,名字的組件)
當然,我不想將任何附加參數傳遞給方法。
在此先感謝
最後我找到了解決方案。
我正在尋找一種方法來限制不允許訪問我的非託管dll。所以我爬了我的調用者組裝位置的堆棧跟蹤。
最後,我決定檢查調用者程序集的公鑰標記(找到這種方式)並驗證它。
感謝你的時間和答案...
您能否提供更多信息?你是如何檢查非託管C++程序集中的調用者c#程序集的公鑰標記的?你能給代碼示例嗎? – 2012-08-30 13:56:43
請提供代碼。 – 2012-11-12 18:19:57
以下代碼取出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
你不知道。你的外部方法可以被任何C語言兼容的語言調用,因此Windows和CRT存儲關於CLR語言的額外信息。
這需要一趟棧道。在託管代碼中運行良好,這就是代碼訪問安全性的實現方式。 不是在有本地堆棧幀行走時工作得很好。你可以在你的本地代碼中嘗試StackWalk64()。昂貴且不太可能成功,特別是在.NET 4.0中,CLR不再僞造模塊。對非常感興趣警惕幀指針省略優化選項。
不要這樣做,我會說。簡單地通過讓託管代碼傳遞額外的參數來解決問題就容易多了。
西方邪惡的女巫? – Dynite 2011-03-28 14:40:37