как правильно написать библиотеку 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 шт):
А почему ты второе объявление не сделал по аналогии с первым? Зачем у тебя в h в первом случае кода исполняемого внутри функции нет, а во втором случае вызов Width? Обычно же в h только объявления функций, а определения в cpp.
extern "C" __declspec(dllexport) list<int> Width() {}