DllImport如何真正起作用?

Tom*_*man 11 c# dll pinvoke dllimport

我想知道它是如何DllImport工作的.我需要一个简单的英语解释 - 意思是简单的解释.

它是否与DLL中的导出方法静态链接,如"包含文件"指令/静态库?

或者当它到达C#程序中的执行点时,它是否从DLL动态调用该方法?

Han*_*ant 23

它使用两个核心winapi功能.首先是LoadLibrary(),它将DLL加载到进程中的winapi函数.它使用您为DLL指定的名称.第二个是GetProcAddress(),winapi函数返回DLL中函数的地址.它使用您指定的函数的名称.然后使用您指定的参数为函数调用构建堆栈帧的一些管道运行,并在它找到的地址处调用该函数.

所以,是的,这是非常有活力的.直到你的代码真正落在调用pinvoked函数的语句上才会发生这种情况.技术术语是"后期绑定",而不是Windows加载程序用于本机代码的更常见的早期绑定.


Fro*_*ire 6

它动态调用它.DLLimport不会在您编译的程序中嵌入任何内容.这就是为什么当你使用DLLImport时,确保最终用户在正确的位置有正确的DLL,或者你的程序不能工作是很重要的.

希望这对你有所帮助!