如何以编程方式检测代码是在共享DLL还是exe中运行?

时间:2009-10-27 20:34:26

标签: c# .net winapi dll registerhotkey

A有一个C#类,简化了全局热键的处理。 该类使用Win32-API函数RegisterHotKey()来注册热键。

根据MSDN,此函数需要ID值在0x0000到0xBFFF范围内 从应用程序调用时,ID值在0xC000到0xFFFF范围内 从共享DLL调用。 GlobalAddAtom()可用于在运行时获取ID 在DLL中。

要隐藏与类用户的区别,类本身应该决定哪个 注册热键时使用ID范围。好吧,要做到这一点,班级必须 能够检测其代码是在应用程序内还是在应用程序内运行 共享DLL。

但是怎么做?什么是最好的C#/ .NET方式呢?

3 个答案:

答案 0 :(得分:3)

试试这个:

bool isDll = this.GetType().Assembly.EntryPoint == null;

MSDN:

Assembly.EntryPoint Property

  

“属性值MethodInfo对象   这代表了入口点   这个集会。如果没有入口点   发现(例如,组件是一个   DLL),一个空引用(Nothing in   返回Visual Basic)。 “

答案 1 :(得分:3)

答案 2 :(得分:1)

完成菲利普回答:

您需要获取调用函数的程序集的引用,因此代码应如下所示:

Assembly assembly = Assembly.GetCallingAssembly();
Boolean isDll = assembly.EntryPoint == null;

希望这有帮助。

Ricardo Lacerda Castelo Branco