윤성우 뇌를자극하는 윈도우즈 시스템 프로그래밍중에 dll에 대하여 공부중인데요,
dll파트에서 __declspec(dllexport)와 , __ declspec(dllimport) 에 대한 키워드가 나왔습니다.
void TestFunc()
{
cout<<"Hello World" <
}
TestFunc에 대한 함수를 dll로 만들려 한다면,
TestFunc.cpp
__declspec(dllexport)
void TestFunc()
{
cout<<"Hello World" <
}
TestFunc.h
__declspec(dllimport)
void TestFunc();
이런식으로 헤더파일에는 dllimport를 , cpp 정의부분에는 dllexport를 쓰면 되는건가요?
그런데, 본문중에서
"DLL을 빌드할때 필요로 하는 함수선언과, DLL을 참조할 때 필요로하는 함수 선언이 다르다는 문제가 있다.
하나는 import선언을, 하나는 export 선언을 해야만 한다. 이를 위해서 두개의 헤더파일이 필요하다"
라는 내용이 있는데, 제 생각에는 어차피 선언 부에는 __declspec(dllimport) 키워드를 붙인 헤더파일이 한개만 필요 할텐데
왜 2개가 필요하다고 했는지 잘 이해가 안됩니다...
제가 뭔가를 놓치고 있는건가요??
아니면 그냥 dllimport는 선언부, dllexport 정의부에 쓴다 라고 단순하게 이해하면 되는건가요??
TestFunc.cpp 랑 TestFunc.h 가 같은 프로젝트에 들어간다는 얘기가 아님
아니 근데 dll 만들려면 같은 프로젝트에서 .cpp랑 .h넣고 빌드해야 하는거 아닌가요?
난 그책으로 공부안해서 그런데 앞뒤 문맥좀 알려줄수 있음? 이거 질문이 좀 이상함
같은 프로젝트가 아니어도 됨 SQLite를 dll로 쓴다 하면 최신 SQLite dll 파일로 바꿔넣어도 돼야 정상임
네 본문캡처해서 올렸습니다.
그니까 빌드랑 참조가 같은 프로젝트 내에서 일어나는게 아니란 말이요
dll을 배포할때 h파일이랑 같이 배포하는데, 그때 사용되는 h파일과
실제 프로젝트에서 사용되는 h파일이 export/import 가 다르니까 다르단 말이요
실제 프로젝트에서 사용되는 h파일은 import만 필요한거 아닌가요? export는 dll파일에 있을테니까요
그러니까 import가 dll쪽 프로젝트에 쓰는게 아니라는거임
"실제 프로젝트" 라는 말이 해당 dll을 사용하는 다른 별개의 프로젝트 라는 의미로 쓴건데
이렇게 해석한거면 맞음
dll빌드할땐 export를 써야지
니가 아까 올린거 맞음
아아 맞군요.. 코드가 이상하게나와서 죄송합니다.. 이해했어요 ㅠㅠ
너무 감사합니다 프린이를 살리셨어요
dllexport를 구현 파일에 쓸 수도 있지만 헤더 파일에 쓰고 구현 파일에서 생략할 수도 있음
그리고 dll은 공유 라이브러리라서 기본적으로 exe와 함께 빌드되지 않음
아 제가 뭔가 놓치고있었네요... export도 헤더파일 선언부에 쓸수 있다는 것을 놓쳤어요