我正在尝试在基于Windows平台构建的Mono框架上运行该应用程序。我知道在其中使用了一些特定于平台的Interop调用。在使用调试在Mono中运行应用程序时,我收到了以下消息。我知道它正在寻找LoadLibrary,但我的兴趣是了解“__Internal”,这是什么意思?
Mono: DllImport attempting to load: '__Internal'.
Mono: DllImport loaded library '(null)'.
Mono: DllImport searching in: '__Internal' ('(null)').
Mono: Searching for 'LoadLibrary'.
Mono: Probing 'LoadLibrary'.
Mono: Probing 'LoadLibrary'.
Mono: Probing 'LoadLibraryA'.
Mono: Probing 'LoadLibraryA'.
Mono: DllImport searching in: '__Internal' ('(null)').
Mono: Searching for 'GetProcAddress'.
Mono: Probing 'GetProcAddress'.
Mono: Probing 'GetProcAddress'.
Mono: Probing 'GetProcAddressA'.
Mono: Probing 'GetProcAddressA'.
Mono: DllImport searching in: '__Internal' ('(null)').
Mono: Searching for 'FreeLibrary'.
Mono: Probing 'FreeLibrary'.
Mono: Probing 'FreeLibrary'.
Mono: Probing 'FreeLibraryA'.
Mono: Probing 'FreeLibraryA'.
Mono: DllImport searching in: '__Internal' ('(null)').
Mono: Searching for 'LoadLibrary'.
Mono: Probing 'LoadLibrary'.
Mono: Probing 'LoadLibrary'.
Mono: Probing 'LoadLibraryA'.
Mono: Probing 'LoadLibraryA'.
最诚挚的问候, Omky
答案 0 :(得分:3)
这是正在搜索该函数的DLL的名称。这通常是“kernel32.dll”来查找LoadLibrary(),但Mono也支持特殊名称"__Internal"
。这使得它在已经加载的DLL中查找导出的函数。最初用于非托管程序中embedding Mono的功能。
它适用于Windows,即使未嵌入Mono也是如此。 Kernel32.dll 始终加载,因为它需要运行进程。所以可能的[DllImport]指令是:
[DllImport ("__Internal", CharSet = CharSet.Ansi)]
static extern bool LoadLibrary(string path);