0

我在 C++ 中继承了一个旧的 DLL 项目。它使用 VS 6.0 编译。

这是多年来一直在工作的事情。

我在构建项目时注意到的第一件事是一些通常与缺少分号有关的警告,但事实并非如此,请看一下:

头文件中的警告:

someproject\include\somefile.h(27) : warning C4518: '__declspec(dllexport) ' : storage-class or type specifier(s) unexpected here; ignored

代码:

#ifdef __cplusplus
extern "C" {
#endif
    VOID    DLLExport WINAPI func1        (unsigned char  *c, SHORT b, BOOL bIsChar, SomeTask* spTask);

    VOID    DLLExport WINAPI func2        (unsigned char  *c, SHORT b, BOOL bIsChar, SomeTask* spTask);
    PBYTE   DLLExport WINAPI func3          (PBYTE cpStr, BYTE cCh);
    SomeTask*   DLLExport WINAPI TaskPtr(VOID); // <- Ofending line

cpp 文件中的警告:

someproject\somecode.cpp(3264) : warning C4518: '__declspec(dllexport ) ' : storage-class or type specifier(s) unexpected here; ignored

代码:

extern "C" SomeTask* DLLExport WINAPI TaskPtr(VOID)
{
    blah(); 
    blah(); 

类的代码:

class SomeTask
{
public:
    SomeTask(){}
            etc
4

1 回答 1

1

该消息似乎暗示这dllexport(winapi)是一种语言扩展,其行为类似于存储类或类型说明符。这些术语可以以任何顺序出现,但通常存储类在类型之前:我们说static int不是int static。此代码使用不寻常的顺序,旧编译器显然不支持。但在这种情况下,除非您构建一个 DLL,否则这无关紧要。

于 2013-08-02T23:25:20.980 回答