什么是dllspec(dllimport的)和dllspec(dllexport)的手段(What

2019-07-29 01:53发布

谷歌搜索后,我才知道的DllImport使可用于其他模块的功能,

是强制与外部的“C”标识符声明功能?

此外,DLLEXPORT意味着,DLL本身使用的功能,同时编译它说。 所以默认所有

在DLL本功能DLLEXPORT?

Answer 1:

__declspec(dllexport)出口的象征。 这使得可以从一个DLL外面。

__declspec(dllimport)导入符号。 它实际上是说:“这个符号是不是在这个应用程序定义的,它需要从DLL文件导入”。

你不必与声明它extern "C" 。 如果你不使用extern "C" ,则符号将出口作为一个C ++符号,你将只能从C调用它++(以及支持调用C ++的DLL语言)。 如果您使用extern "C" ,则符号将出口作为一个C符号,你将能够从支持calingÇDLL的语言调用它。

如果您想使用C#您的DLL,您将需要使用extern "C"

这里是一个很好的教程,告诉您如何在C#中使用C ++ DLL: 如何编组C ++类 。 我在工作中许多项目使用A液。

此外,这里是你如何可以在另一个C ++应用程序中使用C ++ DLL一个简短的教程: 如何创建和使用C使用DLL ++ 。



Answer 2:

否 - DLLEXPORT意味着你从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功能。 否则,你将包括客户端代码相同的标题需要使用的功能(S)。 它不会定义BUILDDLL ,所以他们都会来代替标记为dllimport的,所以当它涉及到链接时,它会创建的,而不是试图从像标准库某处满足这些功能的链接到该DLL。



Answer 3:

这也意味着,条目(静态导入和导出表的形式)在exe文件,dll..files,该文献的提供者和消费者之间的依赖关系创建(通过链接)。



文章来源: What is dllspec(dllimport) and dllspec(dllexport) means