[C/C++] dll 작성 (window)
visual studio 2019사용, 환경은 window 64-bit.
처음엔 gcc 쓰려고 했는데 gcc로 컴파일한 걸 다른 언어로 작성한 프로그램에서 실행하자니 오류가 나서...일단 간단하고 편하게 하기 위해 visual studio 2019 기준으로.
1. 프로젝트 생성
DLL(동적 연결 라이브러리) 프로젝트를 선택하여 생성한다.
2. cpp파일과 h파일 작성
cpp 파일 작성이야 어려울 것 없으니 넘어가고.
문제는 헤더 파일인데...
#pragma once
#ifdef FUNC_EXPORTS
#define FUNC_API __declspec(dllexport)
#else
#define FUNC_API __declspec(dllimport)
#endif
extern "C" FUNC_API int int_func(int i);
extern "C" FUNC_API char* char_func(char* c);
extern "C" FUNC_API void ptr_func(int* ptr);
위와 같이 작성한다. 알아보기 쉽도록 하기 위해 상수 이름은 모두 프로젝트 이름과 통일시켜주었다.
FUNC_EXPORTS는 vs2019로 프로젝트 생성시 자동으로 생성되는 상수 이름인데, 이 이름은 솔루션 탐색기의 [속성] → [C/C++] → [전처리기] → [전처리기 정의]에서 확인할 수 있다. ${name}_EXPORTS라는 이름으로 추가되어 있는 것을 확인할 수 있다.
프로젝트 이름에 따라 상수명이 달라지는 것 같으니 확인 한 번 정도는 해주자. __declspec(dllexport), __declspec(dllimport) 관련은 나중에 따로 공부해서 정리해보는 걸로...
3. 빌드
컴파일 시 bit에 주의하자. 아무 생각 없이 build 했다가 다른 언어에서 dll 불러올 때 피 봄.
내 경우에는 기본으로 32bit로 설정이 되어 있어서 64bit로 바꿔주었다.

여기서 바로 바꾸거나...

구성 관리자를 켜서 플랫폼에 맞게 바꿔주자.
이후 build 과정 역시 별 차이 없다. 그냥 [빌드] → [솔루션 빌드] 하면 끝.
겪은 에러나 문제:
- pch.h를 소스에 추가하시겠습니까: 솔루션 탐색기의 [속성] → [C/C++] → [미리 컴파일된 헤더]에서 미리 컴파일된 헤더 항목을 미리 컴파일된 헤더 사용 안 함으로 바꾼다.
- x64로 바꾼 후 build하니, build한 결과물이 늘 보던 그 폴더가 아니라 project root directory의 x64 안에 들어가 있었다.