C++ 尝试在VC+;中使用静态类函数编译DLL时出错+;

C++ 尝试在VC+;中使用静态类函数编译DLL时出错+;,c++,visual-studio,dll,C++,Visual Studio,Dll,我正在尝试在一个独立的应用程序中使用我制作和测试过的一些函数。现在,我正试图创建一个DLL,我得到了一些错误,说明函数已被重新定义,返回参数不匹配。这似乎是我唯一一次遇到这些错误,我已经通过删除这个类对它进行了测试,它可以很好地编译,以及带有main.cpp直接引用这些错误的独立应用程序。以下是错误以及h和cpp文件: 错误7错误C2371:“Parser::parse”:重新定义;不同基础 类型c:\users\seb\documents\visualstudio 2005\projects\

我正在尝试在一个独立的应用程序中使用我制作和测试过的一些函数。现在,我正试图创建一个DLL,我得到了一些错误,说明函数已被重新定义,返回参数不匹配。这似乎是我唯一一次遇到这些错误,我已经通过删除这个类对它进行了测试,它可以很好地编译,以及带有main.cpp直接引用这些错误的独立应用程序。以下是错误以及h和cpp文件:

错误7错误C2371:“Parser::parse”:重新定义;不同基础 类型c:\users\seb\documents\visualstudio 2005\projects\TestDLL\TestDLL\parser.cpp 17

错误4错误C2526:'Parser::parse':无法使用C链接函数 返回C++类的STD::vector’c:\\s\\bb.文档\Visual\Visual studio 2005\projects\TestDLL\TestDLL\parser.h 28

错误6错误C2556:“IDVec解析器::parse(const char*)”:重载 函数仅在返回类型上与“void Parser::parse(const)”不同 char*)'c:\users\seb\documents\visualstudio 2005\projects\TestDLL\TestDLL\parser.cpp 17

还可以从.cpp中找到.h文件和函数:

Parser.h

#ifndef PARSER_H
#define PARSER_H

#if defined DLL_EXPORT
#define TESTAPI __declspec(dllexport)
#else
#define TESTAPI __declspec(dllimport)
#endif

#include <iostream>
#include <vector>

typedef struct _ListEntry {
    std::string id, path;
} ListEntry;

typedef std::vector<ListEntry> IDVec;

extern "C"
{
    class TESTAPI Parser
    {
    public:
        Parser(void);
        ~Parser(void);
        static IDVec parse(const char* Buffer);
    private:
        static size_t nextLine(std::string& rstrText, size_t pos);
        static std::string nextWord(std::string& rstrText, size_t pos);
        static void fixOSSpecificPath(std::string& rstrPath);
    };
}

#endif

谢谢任何建议

< >删除你的类定义周围的代码>外部> C”/>代码> < /p>你希望通过在C++代码>外部的“C”<代码>块中包装C++类来实现什么?另外,如果所有成员都是静态的,那么首先为什么它是一个类。去掉'extern“C”链接。C语言中没有类和成员函数。这是我第一次创建DLL,我只是按照他们所说的基本教程进行操作。这似乎很有效。不过,我还有一个后续问题要问。大多数DLL创建教程都在外部“C”块中显示类。这有什么用呢,还是没有必要。这是一些奇怪的教程。用外部的“C”盲目包装C++类是没有意义的。extern“C”在这里的作用有很好的解释:
IDVec Parser::parse(const char* Buffer) 
{

    std::string s = Buffer;
    IDVec v;

    // Doing stuff here

    return v;
}