Ошибка компоновщика DLL C ++ - PullRequest
0 голосов
/ 16 января 2012

Я хочу написать DLL для API устройства.Так как я новичок в DLL, я хотел реализовать его в простом текстовом редакторе, а затем сделать его для API.Я сделал заголовочный файл и файл cpp, но когда я запускаю код, я получаю ошибку lnk2001, за которой следует lnk1120, которая является неразрешенной внешней ошибкой.

Я действительно понятия не имею, где я допустил ошибку, насколько я вижуя сделал это правильно.Мне было интересно, если вы, ребята, могли бы помочь мне.tnx.

вот мой заголовочный файл

// EditFuncsDll.h
#include <cstdio>
#include <vector>
#include <string>

namespace EditFuncs
{
    class MyEditFuncs
{
private:
    static std::vector<std::string> MyTextBox;

public:
    static __declspec(dllexport) void Load(std::string command);
    static __declspec(dllexport) void Save(std::string command);
    static __declspec(dllexport) int Lines();
    static __declspec(dllexport) void Add(std::string command);
    static __declspec(dllexport) void Remove(std::string command);
    static __declspec(dllexport) void Insert(std::string command);
    static __declspec(dllexport) int wc(std::string command);
    static __declspec(dllexport) void GetInfo();
};
}

, и в моем файле cpp я просто определяю функции, которые я объявил в заголовочном файле.

, и это ошибки, которые яget

Ошибка 25 ошибка LNK2001: неразрешенный внешний символ "private: статический класс std :: vector, класс std :: allocator>, класс std :: allocator, класс std :: allocator>>> EditFuncs:: MyEditFuncs :: MyTextBox "(? MyTextBox @ MyEditFuncs @ EditFuncs @@ 0V? $ Vector @ V? $ Basic_string @ DU? $ Char_traits @ D @ std @@ V? $ Allocator @ D @ 2 @@ std @@ V? $ allocator @ V? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@@ 2 @@ std @@ A) C: \ Users \ Lucy \ Desktop \Erfan \ Text_Editor_DLL \ Text_Editor_DLL \ EditFuncsDll.obj Text_Editor_DLL

и

Ошибка 26, ошибка LNK1120: 1 неразрешенный внешний вид C: \ Users \ Lucy \ Desktop \ Erfitor \ Text_Ell_Ell: TextDebug \ Text_Editor_DLL.dll Text_Editor_DLL

Ответы [ 2 ]

1 голос
/ 16 января 2012

Заголовок вашего cpp должен быть таким:

    #include "EditFuncsDll.h"
#include <iostream>
#include <fstream>
 using namespace std;
 namespace EditFuncs 
 { 
     std::vector<std::string> EditFuncs::MyEditFuncs::MyTextBox;  
     void MyEditFuncs::Load(string command) 
     { 
        string filename; // The name of the file starts at the fifth character of the command and goes to the end 
        filename = command.substr(5,command.size()); 
        ifstream inFile;
        inFile.open(filename);
        .
        .
        .
0 голосов
/ 16 января 2012

В заголовочном файле вашей DLL вы можете использовать макрос препроцессора, который расширяется до __declspec(dllimport) для клиентов DLL и до __declspec(dllexport) для кода, реализующего библиотеку DLL (т.е. ваши файлы DLL .cpp).

// EditFuncsDll.h

#ifdef EDIT_FUNCS_DLL_IMPLEMENTATION
#define EDIT_FUNCS_DLL __declspec(dllexport) // for DLL implementation
#else
#define EDIT_FUNCS_DLL __declspec(dllimport) // for clients
#endif

class EDIT_FUNCS_DLL MyEditFuncs
{
...
};

В исходных файлах .cpp вашей DLL вы можете #define EDIT_FUNCS_DLL_IMPLEMENTATION перед # включением вашего заголовка DLL:

// EditFuncsDll.cpp

#define EDIT_FUNCS_DLL_IMPLEMENTATION
#include "EditFuncsDll.h"

// ... implementation code
...