C++ dllspec(dllimport)和dllspec(dllexport)是什么意思

C++ dllspec(dllimport)和dllspec(dllexport)是什么意思,c++,dll,dllimport,dllexport,C++,Dll,Dllimport,Dllexport,在谷歌搜索之后,我知道Dllimport为其他模块提供了该功能 是否必须声明具有外部“c”标识符的函数 此外,Dllexport意味着Dll本身在编译时使用函数。因此,默认情况下,所有 DLL中的函数是dllexport?\u declspec(dllexport)导出符号。它使它从DLL外部可用 \u declspec(dllimport)导入符号。它实际上是说“这个符号没有在这个应用程序中定义,它需要从一个DLL文件中导入” 您不必使用extern“C”声明它。如果你不使用外“C”,那么符号

在谷歌搜索之后,我知道Dllimport为其他模块提供了该功能

是否必须声明具有外部“c”标识符的函数

此外,Dllexport意味着Dll本身在编译时使用函数。因此,默认情况下,所有

DLL中的函数是dllexport?

\u declspec(dllexport)
导出符号。它使它从DLL外部可用

\u declspec(dllimport)
导入符号。它实际上是说“这个符号没有在这个应用程序中定义,它需要从一个DLL文件中导入”

您不必使用
extern“C”
声明它。如果你不使用<代码>外“C”<代码>,那么符号将被导出为C++符号,并且只能从C++调用它(以及支持调用C++ DLL的语言)。如果使用
extern“C”
,则该符号将作为C符号导出,并且您可以从支持校准C DLL的语言中调用它

如果要在C#中使用DLL,则需要使用
extern“C”

这是一个优秀的教程,它展示了如何在C++语言中使用C++ DLL。我在工作中的许多项目中使用了解决方案

还有一个简短的教程,介绍如何在另一个C++应用程序中使用C++ DLL:.< /p>< P> NO.DLEx销意味着您从DLL(或从可执行文件)导出它,以便其他模块(DLL或可执行文件)可以使用该函数。


dllimport用于声明在DLL(或可执行文件)中实现的函数

因此,在一个典型案例中,您会遇到如下情况:

#ifdef BUILDDLL
#define DLL declspec(dllexport)
#else
#define DLL declspec(dllimport)
#endif
然后,DLL中的每个公共函数都将标记为
DLL

DLL int dosomething(int);

然后,在构建DLL时,将定义
BUILDDLL
,以将所有这些函数标记为dllexport。否则,您将在需要使用函数的客户端代码中包含相同的头。它不会定义
BUILDDLL
,因此它们都会被标记为dllimport,因此当涉及到链接时间时,它会创建指向该DLL的链接,而不是试图从标准库之类的地方满足这些函数。

它还意味着(由链接器)创建条目(以静态导入和导出表的形式)在exe、dll..文件中,记录提供者和使用者之间的依赖关系。

dllimport用于声明在dll中实现的函数,此dllimport有何用途?@LLL:它让编译器知道它来自dll。来自DLL的函数总是通过指针调用,因此编译器必须知道足够的信息才能生成该函数。@ll假设您正在创建两个项目:MyDLL和MyApp。在MyDLL中定义一个函数,然后将MyDLL.dll文件导入MyApp.exe并从中调用该函数。您需要在MyDLL项目中使用
uu declspec(dllexport)
(标记您正在导出函数)。并且您需要在MyApp项目中使用
uu declspec(dllimport)
,从DLL导入函数。谢谢Jerry,您能澄清一些事情吗?
\ifdef BUILDDLL
对于每个项目都应该是唯一的(或解决方案)对吗?这样,当你从一个已经构建的dll中添加头文件时,你可以使用dllexport获得正确的头文件,而其他头文件应该是dllimport。对吗?@Ben:如果你要构建一个dll,导出它自己的一些函数,并从其他dll中导入一些函数,那么每个头文件都需要使用不同的名称。