【发布时间】:2017-11-06 08:40:54
【问题描述】:
我创建了一个 VC++ Win32 控制台应用程序并勾选了 DLL,但也忘记了勾选“导出变量”。后来我注意到那里的类、变量等没有被导出到调用应用程序(它正在使用 [DllImport...])。
当然,我可以创建一个新的 DLL 并勾选“导出”选项,但事后有没有办法做到这一点?
【问题讨论】:
标签: c++ visual-studio-2012 dll export
我创建了一个 VC++ Win32 控制台应用程序并勾选了 DLL,但也忘记了勾选“导出变量”。后来我注意到那里的类、变量等没有被导出到调用应用程序(它正在使用 [DllImport...])。
当然,我可以创建一个新的 DLL 并勾选“导出”选项,但事后有没有办法做到这一点?
【问题讨论】:
标签: c++ visual-studio-2012 dll export
这一切都归结为声明导出的名称__declspec(dllexport)。
“导出”复选框仅生成一个额外的 .h 文件,其中定义了以下内容:
#ifdef MYPROJECT_EXPORTS
#define MYPROJECT_API __declspec(dllexport)
#else
#define MYPROJECT_API __declspec(dllimport)
#endif
这样你以后就可以在代码中编写:
MYPROJECT_API void MyExportedFunction();
您还可以在 DLL 以及使用您的 DLL 的客户端代码中重用此声明(请注意,无论“导出”复选框如何,都会自动定义 MYPROJECT_EXPORTS)。
您不能稍后生成MYPROJECT_API,但您可以轻松地手动生成和/或通过其他方式声明导出的函数__declspec(dllexport)。
【讨论】:
是的,您也可以稍后更改。只需创建一个新的 DLL 项目,您可以在其中导出内容并比较项目文件。您也可以在项目设置 UI 中进行一些调整,但这可能会更加困难。
【讨论】: