谷歌搜索后,我才知道的DllImport使可用于其他模块的功能,
是强制与外部的“C”标识符声明功能?
此外,DLLEXPORT意味着,DLL本身使用的功能,同时编译它说。 所以默认所有
在DLL本功能DLLEXPORT?
谷歌搜索后,我才知道的DllImport使可用于其他模块的功能,
是强制与外部的“C”标识符声明功能?
此外,DLLEXPORT意味着,DLL本身使用的功能,同时编译它说。 所以默认所有
在DLL本功能DLLEXPORT?
__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 ++ 。
否 - 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。
这也意味着,条目(静态导入和导出表的形式)在exe文件,dll..files,该文献的提供者和消费者之间的依赖关系创建(通过链接)。