Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“外部”;";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 - Fatal编程技术网 为了使此代码编译,我必须进入项目的属性,并将C/C++ ++代码>调用约定< /C> >到yas-STDLCALL(/GZ),并将编译为< /C> >编译为C++代码(/TP)。,c++,dll,extern,C++,Dll,Extern" /> 为了使此代码编译,我必须进入项目的属性,并将C/C++ ++代码>调用约定< /C> >到yas-STDLCALL(/GZ),并将编译为< /C> >编译为C++代码(/TP)。,c++,dll,extern,C++,Dll,Extern" />

“外部”;";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扩展名修复了我的问题,所以我现在不回头看了!)