“外部”;";DLL:调试正常,发行版抛出错误C2059 我有一个DLL,我创建了一个C++ Win32应用程序。为了防止DLL中的名称损坏,我使用了下面定义的导出定义: #ifndef EXPORT #define EXPORT extern "C" __declspec(dllexport) #endif EXPORT int _stdcall SteadyFor(double Par[], double Inlet[], double Outlet[]); P>为了使此代码编译,我必须进入项目的属性,并将C/C++ ++代码>调用约定< /C> >到yas-STDLCALL(/GZ),并将编译为< /C> >编译为C++代码(/TP)。
这在调试模式下工作,但发布模式在我的所有导出函数上抛出“外部”;";DLL:调试正常,发行版抛出错误C2059 我有一个DLL,我创建了一个C++ Win32应用程序。为了防止DLL中的名称损坏,我使用了下面定义的导出定义: #ifndef EXPORT #define EXPORT extern "C" __declspec(dllexport) #endif EXPORT int _stdcall SteadyFor(double Par[], double Inlet[], double Outlet[]); P>为了使此代码编译,我必须进入项目的属性,并将C/C++ ++代码>调用约定< /C> >到yas-STDLCALL(/GZ),并将编译为< /C> >编译为C++代码(/TP)。,c++,dll,extern,C++,Dll,Extern,这在调试模式下工作,但发布模式在我的所有导出函数上抛出错误C2059:syntax error:'string'——即使我已将发布模式设置配置为与调试设置相同 如何获得要编译的发布模式 问候, ~Joe (在Visual Studio 2008 Professional下开发) 编辑: 很多关于我的#define的评论,似乎没有引起任何问题 为了消除混淆,我的头文件已重写如下: #ifndef coilmodel_h #define coilmodel_h extern "C" __decls
错误C2059:syntax error:'string'
——即使我已将发布模式设置配置为与调试设置相同
如何获得要编译的发布模式
问候,~Joe
(在Visual Studio 2008 Professional下开发) 编辑:
很多关于我的#define的评论,似乎没有引起任何问题 为了消除混淆,我的头文件已重写如下:
#ifndef coilmodel_h
#define coilmodel_h
extern "C" __declspec(dllexport) int _stdcall steadyFor(double Par[], double Inlet[], double Outlet[], char* FileIn, char* FileOut);
#endif
就这些
错误是:描述
错误C2059:语法错误:“字符串”
文件
coilmodel.h
行
4
同样,此错误仅在发布模式下出现,而不是在调试模式下出现。Project是C++ Win32 DLL应用程序。< P>我猜想,代码>导出< /COD>被定义为发布版本中的其他内容。因为在定义周围有一个
#ifndef
,如果已经定义了它,那么它将不会起任何作用,然后在函数声明的开头粘贴其他内容(可能是字符串?)
所以,不妨尝试一下这样的方法:
#ifdef EXPORT
#error EXPORT already defined!
#else
#define EXPORT extern "C" __declspec(dllexport)
#endif
如果源文件具有
.c
扩展名,则您使用的编译器将其编译为c(而不是c++),并在外部“c”
上产生该错误。如果是这种情况,则需要使用您已经注意到的/TP
开关,或者将文件重命名为.cpp
。另一种解决方案是在外部放置ifdef:
#ifdef __cplusplus
extern "C"
#endif
不可能,但确保DLExcel或O-STDLASK不是……< < /P> < P>强制<代码>编译为< /C> >编译为C++代码(/TP)-是否在所有构建配置上设置了此项?调试/发布X 32 /X64等。我避免使用此选项,更容易为编译器自动命名文件以便自动选择。
只需要<代码> C >代码>部分>代码>外部“C”<代码>文件为C++关闭名称。 我更喜欢使用这种格式安排共享公共头,这样您就可以在C/C++内部或外部包含
#ifdef __cplusplus
# define NOMANGLE extern "C"
#else
# define NOMANGLE
#endif
#ifdef EXPORT_BUILD
# define EXPORT NOMANGLE __declspec(dllexport)
#else
# define EXPORT NOMANGLE __declspec(dllimport)
#endif
我认为你发布的代码与问题无关。你能告诉我们哪一行阻塞了,并把那一行的代码贴出来吗。从您发布的代码来看,您似乎没有在发布模式下定义导出。请参阅上面的“编辑”部分。我不能在这里全部解释。这是一个好主意,但是之前并没有定义导出。编译器认为“C”是一个字符串,因此遇到问题。就是这样!谢谢马克·威尔金斯!事实上,我刚刚将文件重命名为.cpp…它成功了!再次感谢~我没有,但我肯定是有意的!VisualStudio无法简单地比较调试和发布之间的设置,因为这些设置位于不同的屏幕上。重命名我的所有*.c文件以包含.cpp扩展名修复了我的问题,所以我现在不回头看了!)