[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
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.