как правильно написать библиотеку dll на c++

недавно понадобилось программно изменять разрешение экрана, по примеру из ютуба сделал библиотеку на один конструктор, который собственно принимал высоту и ширину и меня разрешение экрана, все работало, но мне понадобилось еще и получить все допустимые разрешения монитора, и вот тут возникла проблема:

Screen.cpp:

#include "pch.h"
#include "Screen.h"
#include <iostream>
#include <list>

using namespace std;

void Screen::Resize(int width, int height) 
{
    DEVMODE dm;
    dm.dmSize = sizeof(DEVMODE);
    dm.dmPelsWidth = width;
    dm.dmPelsHeight = height;
    dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
    ChangeDisplaySettings(&dm, CDS_UPDATEREGISTRY);
}

list<int> Screen::Width()
{
    list<int> width;
    DEVMODE dm = { 0 };
    dm.dmSize = sizeof(dm);
    for (int i = 0; EnumDisplaySettings(NULL, i, &dm) != 0; i++)
    {
        width.push_back(dm.dmPelsWidth);
    }

    return width;
}

Sreen.h:

class __declspec(dllexport) Screen {

public:
    void Resize(int width, int height);
    list<int> Width();
};

extern "C" __declspec(dllexport) void Resize(int width, int height){}
extern "C" __declspec(dllexport) list<int> Width_Return() {  return Width(); }

С последней строчкой возникают проблемы, во-первых как мне вернуть возвращаемое значение функции Width(), ведь в таком варианте возникает ошибка, а во-вторых на объявление Width_Return() мне выкидывает это: объявление несовместимо с " Width_Return" (объявлено в строке 9 из "C:\USERS\ROMAN\DOCUMENTS\PROJECTS\SCREEN.SIZE\SCREEN.SIZE\Screen.h"). В с++ я полный новичок, взялся за него постольку поскольку, по этому не судите строго.


Ответы (1 шт):

Автор решения: xmikex

А почему ты второе объявление не сделал по аналогии с первым? Зачем у тебя в h в первом случае кода исполняемого внутри функции нет, а во втором случае вызов Width? Обычно же в h только объявления функций, а определения в cpp.

extern "C" __declspec(dllexport) list<int> Width() {}
→ Ссылка