我的代码如何知道它寻址的是哪个 .dll?
How does my code know which .dll it adress?
我有一个 sample.dll 文件和一个相应的 sample.h header 文件。我将两者都添加到引用中,并在我的 C++ 代码中包含了 header。该程序如何知道 header 文件对应于特定的 .dll?
How this program knows that header file corresponds that particular .dll?
没有!
基本上,当你编译你的程序时,编译器会看到 sample.h
中的声明,并为 link er 做一个注释,以便以后在需要时找到相应的定义。
当需要 link 您的程序时,link 人员将查看您正在 link 的所有 DLL、库和其他 object 文件with 并尝试找到与编译器在 sample.h
等文件中找到的所有声明相对应的定义,在您的情况下,它将在 sample.dll
中找到它们,因为那是它们被编译的地方。
如果 linker 没有找到匹配的定义,或者如果它找到了几个,那么这是一个错误并且 linking 将失败。
这就是为什么您的程序不需要知道什么 header 对应于什么特定的 .dll,因为对于这些声明中的每一个都 there is only have definition allowed,所以它可以到处寻找直到找到它。
没有。但是,当您调用 header 中定义的函数时,它会查找定义该函数的内容。如果 foo.h
声明 foo()
,并且 foo.dll
包含 foo()
的定义,那么一切都有效。
我有一个 sample.dll 文件和一个相应的 sample.h header 文件。我将两者都添加到引用中,并在我的 C++ 代码中包含了 header。该程序如何知道 header 文件对应于特定的 .dll?
How this program knows that header file corresponds that particular .dll?
没有!
基本上,当你编译你的程序时,编译器会看到 sample.h
中的声明,并为 link er 做一个注释,以便以后在需要时找到相应的定义。
当需要 link 您的程序时,link 人员将查看您正在 link 的所有 DLL、库和其他 object 文件with 并尝试找到与编译器在 sample.h
等文件中找到的所有声明相对应的定义,在您的情况下,它将在 sample.dll
中找到它们,因为那是它们被编译的地方。
如果 linker 没有找到匹配的定义,或者如果它找到了几个,那么这是一个错误并且 linking 将失败。 这就是为什么您的程序不需要知道什么 header 对应于什么特定的 .dll,因为对于这些声明中的每一个都 there is only have definition allowed,所以它可以到处寻找直到找到它。
没有。但是,当您调用 header 中定义的函数时,它会查找定义该函数的内容。如果 foo.h
声明 foo()
,并且 foo.dll
包含 foo()
的定义,那么一切都有效。