Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 德勒曼应该改名吗?_C++_Visual C++_Dll - Fatal编程技术网

C++ 德勒曼应该改名吗?

C++ 德勒曼应该改名吗?,c++,visual-c++,dll,C++,Visual C++,Dll,我正在学习DLL,我在中看到了以下段落: 如果您提供自己的入口点,请参阅DllMain函数。名称DllMain是用户定义函数的占位符。必须指定生成DLL时使用的实际名称。有关更多信息,请参阅开发工具附带的文档 在尝试为starter创建一个小dll时,我注意到,如果我使用不同的名称调用我的dll main, 没有人叫它 这段话是什么意思?是否真的不调用此函数DllMain 还有别的名字吗?操作系统如何知道调用什么函数?他们的意思是,一段文本,即,DllMain是DLL入口点函数的默认名称 默认名

我正在学习DLL,我在中看到了以下段落:

如果您提供自己的入口点,请参阅DllMain函数。名称DllMain是用户定义函数的占位符。必须指定生成DLL时使用的实际名称。有关更多信息,请参阅开发工具附带的文档

在尝试为starter创建一个小dll时,我注意到,如果我使用不同的名称调用我的dll main,
没有人叫它

这段话是什么意思?是否真的不调用此函数
DllMain


还有别的名字吗?操作系统如何知道调用什么函数?

他们的意思是,一段文本,即,
DllMain
是DLL入口点函数的默认名称

默认名称
意味着,除非您以其他方式配置编译器,否则编译器将假定名为
DllMain
的函数应该是入口点

<>这意味着<<强>可以配置< /强>编译器,将任何其他名称视为入口点。通常,编译器将其视为某种类型的
/commandlineparam
-commandlineparam
。见文件

编辑:哦,我刚刚注意到你正在使用MSVC。
以下是这一部分:
他们的意思是,一段文本,即
DllMain
是DLL入口点函数的默认名称

默认名称
意味着,除非您以其他方式配置编译器,否则编译器将假定名为
DllMain
的函数应该是入口点

<>这意味着<<强>可以配置< /强>编译器,将任何其他名称视为入口点。通常,编译器将其视为某种类型的
/commandlineparam
-commandlineparam
。见文件

编辑:哦,我刚刚注意到你正在使用MSVC。
以下是这一部分:

操作系统如何知道调用什么函数呢

操作系统不知道函数的名称,它知道函数的地址。该地址存储在DLL的PE头中,由编译器/链接器设置。函数的名称由编译器的RTL库指定。无论编译器在加载时使用什么代码来设置DLL的内部结构,该代码都会指定必须在自己的代码中实现的函数名和签名。它可能是
Dllmain()
,可能是
DllEntryPoint
,也可能是完全其他的东西。这取决于所使用的编译器和RTL

操作系统如何知道调用什么函数呢


操作系统不知道函数的名称,它知道函数的地址。该地址存储在DLL的PE头中,由编译器/链接器设置。函数的名称由编译器的RTL库指定。无论编译器在加载时使用什么代码来设置DLL的内部结构,该代码都会指定必须在自己的代码中实现的函数名和签名。它可能是
Dllmain()
,可能是
DllEntryPoint
,也可能是完全其他的东西。这取决于所使用的编译器和RTL。

哦,仅仅因为你可以给它起个别的名字,并不意味着链接器就能读懂你的心思。您需要告诉链接器入口点的名称-否则它将假定它应该是
DllMain
,如果它不存在,则DLL将没有入口点。毕竟,入口点是可选的


你的入口点的名称应该通过链接器传递给链接器。

哦,仅仅因为你可以给它起个别的名字,并不意味着链接器会读懂你的心思。您需要告诉链接器入口点的名称-否则它将假定它应该是
DllMain
,如果它不存在,则DLL将没有入口点。毕竟,入口点是可选的


您的入口点的名称应通过。

相关:我注意到,如果我调用我的DllMain另一个名称,则不会调用它。除非您使用上面的链接器设置来允许,否则它不会。我的建议是只使用
DLLMain
,除非你有很好的理由想做额外的工作(需要额外的链接器设置),就像exe项目中的main或WinMain一样,DLLMain是编译器知道的默认入口函数名。您不需要更改该名称。但是如果必须这样做,请确保编译器知道新的入口函数名。相关:我注意到,如果我调用我的DllMain另一个名称,它就不会被调用。除非您使用上面的链接器设置来允许,否则它不会。我的建议是只使用
DLLMain
,除非你有很好的理由想做额外的工作(需要额外的链接器设置),就像exe项目中的main或WinMain一样,DLLMain是编译器知道的默认入口函数名。您不需要更改该名称。但如果必须这样做,请确保编译器知道新的入口函数名。