[C++ DLL] C++ ํด๋์ค๋ฅผ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ)
๋ณธ๋ฌธ์ ์ฝ๊ธฐ ์ ์ ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ดํดํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
[C++ DLL] Visual Studio C++ DLL ์์ฑํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] Visual Studio C++ ์์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] Visual Studio C++ ๋ช ์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
C++ ํด๋์ค๋ฅผ DLL๋ก ๋ง๋ค๊ธฐ
์ง๊ธ๊น์ง C++ ํจ์๋ฅผ DLL๋ก ๋ง๋ค์ด(Export
) ์ธ๋ถ ํ๋ก์ ํธ์์ ํธ์ถ(Import
)ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋๋ฐ์. ๊ทธ๋ฐ๋ฐ Class ๊ฐ์ฒด๋ ์ด๋ป๊ฒ DLL๋ก ๋ง๋ค ์ ์์๊น์? ์๋ ์ฝ๋ ์์์ ๊ฐ์ด ๋ง์ด์ฃ .
//DLL ์์ฑ ํ๋ก์ ํธ์ ํค๋
class Person {
public:
Person(std::string name, int age, std::string address);
void ShowInfo();
private:
int age;
std::string name;
std::string address;
};
//DLL์ ํธ์ถํ๋ ์ธ๋ถ ํ๋ก์ ํธ
Person person1("ํ๊ธธ๋", 26, "์์ธ์");
Person1.ShowInfo();
๋ณดํต ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด 14๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ , 15๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด ๊ฐ์ฒด์ ์ ๊ทผํ์ฌ ํจ์๋ฅผ ํธ์ถํ๋๋ฐ์. ํจ์ ์ด๋ฆ ์์ __declspec(dllexport)
ํค์๋๋ฅผ ๋ถ์ด๋ฏ์ด, ํด๋์ค ์ด๋ฆ์ ๋ถ์ฌ ๋ณด์์ง๋ง ์๋๋๊ตฐ์. ๋์ค์ ์๊ฐํ MFC ํ์ฅ DLL์์๋ AFX_EXT_CLASS
ํค์๋๋ฅผ ํด๋์ค ์ด๋ฆ ์์ ๋ถ์ด๋ฉด, ์ ์ฝ๋ ์์์ ๊ฐ์ด ์ ์ธํ๊ณ ํธ์ถํ ์ ์์ต๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์๊ฐ๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅด์ง๋ง, C++ ํด๋์ค๋ฅผ DLL๋ก Export ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค. ์์ ์ฝ๋๋ ๋ณธ๋ฌธ์ ํ๋จ์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค.
C++ Class DLL Export ๋ฐฉ๋ฒ
๋ณธ๋ฌธ์์ ์ ์ํ ๋ฐฉ๋ฒ์ ์์ฃผ ๊ฐ๋จํฉ๋๋ค. ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ ํฉํ ๋ฆฌ ํจ์๋ฅผ ๋ง๋ค๊ณ , ๋ฐํ๋ ๊ฐ์ฒด๋ก ์ธ์๋ฅผ ๋ฐ๊ณ ํน์ ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํ๋ ํจ์๋ค์ ์ ์ํ๋ ๊ฒ์ ๋๋ค.
MyDLL.h
์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
#pragma once
#include <string>
#include <iostream>
#ifdef CREATEDLL_EXPORTS
#define MYDLL_DECLSPEC __declspec(dllexport)
#else
#define MYDLL_DECLSPEC __declspec(dllimport)
#endif
class Person {
public:
Person(std::string name, int age, std::string address);
void ShowInfo();
private:
int age;
std::string name;
std::string address;
};
extern "C" {
MYDLL_DECLSPEC Person* CreatePerson(char* name, int age, char* address);
MYDLL_DECLSPEC void ShowInfo(Person* obj);
MYDLL_DECLSPEC void DeletePerson(Person* obj);
}
๋ค์์ MyDLL.cpp
์
๋๋ค.
#include "pch.h"
#include "MyDLL.h"
Person::Person(std::string name, int age, std::string address) {
this->age = age;
this->name = name;
this->address = address;
}
void Person::ShowInfo() {
std::cout << "์ด๋ฆ: " << name << std::endl;
std::cout << "๋์ด: " << age << std::endl;
std::cout << "์ฃผ์: " << address << std::endl;
}
Person* CreatePerson(char* name, int age, char* address)
{
std::cout << "Person ๊ฐ์ฒด ์์ฑ" << std::endl;
return new Person(name, age, address);
}
void ShowInfo(Person* obj)
{
obj->ShowInfo();
}
void DeletePerson(Person* obj)
{
delete obj;
obj = nullptr;
std::cout << "Person ๊ฐ์ฒด ํด์ " << std::endl;
}
Person Class๊ฐ MyDLL.h
์ ์ ์๋์ด ์๊ณ , ๋ชธ์ฒด๋ MyDLL.cpp
์ ๊ตฌํ๋์ด ์์ต๋๋ค. ํฉํ ๋ฆฌ ํจ์์ธ CreatePerson()
ํจ์๋ ์ธ์๋ก ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ๋๊ฒจ๋ฐ๊ณ , new Person()
์ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ๋ฐํ๋ ๊ฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฒด์ ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ShowInfo
(
Person* obj
)
์ฒ๋ผ ๋ง์ด์ฃ . ๋ง์ง๋ง์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด DeletePerson
(
Person* obj
)
์ ํธ์ถํ์ฌ ํด์ ํด ์ค์ผ ํฉ๋๋ค.
DLL์ ํธ์ถํ๋ ํ๋ก์ ํธ์ MainDLL.cpp ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
#include "../CreateDLL/MyDLL.h"
#pragma comment (lib, "../x64/Debug/CreateDLL.lib")
int main()
{
char name[] = "ํ๊ธธ๋";
char address[] = "์์ธ์";
Person* person1 = CreatePerson(name, 35, address);
ShowInfo(person1);
DeletePerson(person1);
getchar();
}
ํฉํ ๋ฆฌ ํจ์์ธ CreatePerson()
์ ํธ์ถํ์ฌ Person๊ฐ์ฒด์ ํฌ์ธํฐ๋ฅผ ๋ฐํ๋ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ ShowInfo()
๋ฅผ ํธ์ถํ ์ ์๊ณ , ์ฌ์ฉ์ด ๋๋๋ฉด DeletePerson()
์ ํธ์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๊ฒ์
๋๋ค. ์คํ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ต๋๋ค.
๋ง์ฝ, ์๋์ ๊ฐ์ด ํด๋์ค ๋ฉค๋ฒ ํจ์์ ์ ๊ทผํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
#include "../CreateDLL/MyDLL.h"
#pragma comment (lib, "../x64/Debug/CreateDLL.lib")
int main()
{
char name[] = "ํ๊ธธ๋";
char address[] = "์์ธ์";
Person* person1 = CreatePerson(name, 35, address);
person1->ShowInfo(); // LNK2019
}
ํด๋์ค ์ ๋ณด ์์ฒด๊ฐ Export๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ํด๋์ค ๊ฐ์ฒด๋ฅผ DLL๋ก ๋ง๋ค์ด ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
์ด์ด์ ๋ค์ ํฌ์คํ ์์๋ MFC ํ์ฅ DLL๋ก ์ฝ๊ฒ ํด๋์ค ๊ฐ์ฒด๋ฅผ DLL๋ก ๋ง๋ค๊ณ , ์ธ๋ถ์์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์๊ฐํ๊ฒ ์ต๋๋ค.
'Programming > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] RAII(SBRM)๋ก ์์ ํ๊ฒ ๋ฆฌ์์ค ๊ด๋ฆฌํ๊ธฐ (0) | 2022.07.27 |
---|---|
[C++ DLL] ํด๋์ค๋ฅผ MFC ํ์ฅ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ) (0) | 2020.12.16 |
[C++ DLL] Visual Studio C++ ๋ช ์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ) (2) | 2020.12.10 |
[C++ DLL] Visual Studio C++ ์์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ) (4) | 2020.12.07 |
[C++ DLL] Visual Studio C++ DLL ์์ฑํ๊ธฐ (์์ ํฌํจ) (4) | 2020.12.04 |
[C++ DLL] ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ดํด (0) | 2020.11.28 |
[C++] ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐ๋ก ํ๋ก๊ทธ๋จ ํ์ฅํ๊ธฐ (์์ ํฌํจ) (0) | 2020.10.25 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[C++] RAII(SBRM)๋ก ์์ ํ๊ฒ ๋ฆฌ์์ค ๊ด๋ฆฌํ๊ธฐ
[C++] RAII(SBRM)๋ก ์์ ํ๊ฒ ๋ฆฌ์์ค ๊ด๋ฆฌํ๊ธฐ
2022.07.27 -
[C++ DLL] ํด๋์ค๋ฅผ MFC ํ์ฅ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] ํด๋์ค๋ฅผ MFC ํ์ฅ DLL๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ (์์ ํฌํจ)
2020.12.16 -
[C++ DLL] Visual Studio C++ ๋ช ์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] Visual Studio C++ ๋ช ์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
2020.12.10 -
[C++ DLL] Visual Studio C++ ์์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
[C++ DLL] Visual Studio C++ ์์์ ๋งํฌํ๊ธฐ (์์ ํฌํจ)
2020.12.07