не может вызвать функцию из dll - PullRequest
0 голосов
/ 14 октября 2019

Вопрос в том, что мой компилятор не может разрешить функцию из файла dll

Вот мой код библиотеки

#ifndef DLL_SAMPLE
#define DLL_SAMPLE

#include <iostream>

class A
{
public:
    static void a();
};

#endif
#include "DllSample.h"

void A::a()
{
    std::cout << "hello, world" << std::endl; 
}

Мой исходный код

#include "DllSample.h"

int main(int argc, char* argv[])
{
    A::a();
    return 0;
}

Я настраиваю его следующим образом: enter image description here

Это будет работать, если я вставлю функцию в файл head, но когда я сделаю это выше, сборка не удастся.

Сообщение:

1>    main.obj : error LNK2019: unresolved external symbol "public: static void __cdecl A::a(void)" (?a@A@@SAXXZ) referenced in function _main
1>    D:\Home\Document\Visual Studio 2019 Projects\ErrorShot\Debug\CallDllFunctionSample.exe : fatal error LNK1120: 1 unresolved externals
1>    The command exited with code 1120.
1>  Done executing task "Link" -- FAILED.
1>Done building target "Link" in project "CallDllFunctionSample.vcxproj" -- FAILED.
1>
1>Done building project "CallDllFunctionSample.vcxproj" -- FAILED.
1>
1>Build FAILED.
1>
1>main.obj : error LNK2019: unresolved external symbol "public: static void __cdecl A::a(void)" (?a@A@@SAXXZ) referenced in function _main
1>D:\Home\Document\Visual Studio 2019 Projects\ErrorShot\Debug\CallDllFunctionSample.exe : fatal error LNK1120: 1 unresolved externals
1>    0 Warning(s)
1>    2 Error(s)

1 Ответ

1 голос
/ 14 октября 2019

Вы не помечаете метод (или класс) как dllexport / dllimport. В настройках проекта DLL убедитесь, что определен COMPILING_MY_DLL. Если при запуске приложения пути к DLL правильные, все должно работать нормально.

#ifndef DLL_SAMPLE
#define DLL_SAMPLE

#ifdef COMPILING_MY_DLL
# define MY_DLL_EXPORT __declspec(dllexport)
#else
# define MY_DLL_EXPORT __declspec(dllimport)
#endif

#include <iostream>

class A
{
public:
    MY_DLL_EXPORT static void a();
};

#endif
...