我想了解DllImport
的确如何运作。我需要一个简单的英语解释 - 这意味着简单的解释。
它是否与DLL中的导出方法静态链接,如“包含文件”指令/静态库?
或者当它到达C#程序中的执行点时,是否从DLL动态调用该方法?
答案 0 :(得分:22)
它使用两个核心winapi函数。首先是LoadLibrary(),它将DLL加载到进程中的winapi函数。它使用您为DLL指定的名称。第二个是GetProcAddress(),winapi函数返回DLL中函数的地址。它使用您指定的函数的名称。然后使用您指定的参数为函数调用构建堆栈帧的一些管道运行,并在它找到的地址处调用该函数。
所以是的,这是非常有活力的。直到你的代码真正落在调用pinvoked函数的语句上才会发生这种情况。技术术语是“后期绑定”,而不是Windows加载程序用于本机代码的更常见的早期绑定。
答案 1 :(得分:6)
动态调用它。 DLLimport不会在您编译的程序中嵌入任何内容。这就是为什么当你使用DLLImport时,确保最终用户在正确的位置有正确的DLL,或者你的程序不能工作是很重要的。
希望这能帮到你!
答案 2 :(得分:2)
后者 - 您可以通过指定不存在的dll名称来说服自己。当然,你将能够编译和运行,但不能调用函数。