krkrkrkrkr
310
2020-10-29 11:39:30
2
226

C로 DLL 만드려고 하는데 확장자가 Cpp입니다.


1. Visual studio 에서도 DLL 프로젝트 만들기하면 확장자가 CPP 입니다. DLL 프로젝트의 헤더파일에 extern "C" 하면 소스파일 확장자가 .cpp 이여도  C에서 사용하는데 문제 없는건가요?

2. 문제가 없다고하면 DLL 에서 C에서는 불가능하고 C++에서 가능한 기능들을 사용 할 수 있는건가요? 

3. C로 DLL 만들면 어떤 언어에서든 사용가능하고 , C++으로 DLL 만들면 모든 언어에서는 사용 불가능하다고 하는데 맞는건가요?

4. C DLL 과 C++ DLL 차이점이 무엇인가요?

0
  • 답변 2

  • 빨간오이
    141
    2020-10-29 12:32:03

    extern "C" 로 선언한 함수들은 외부에서 C 라이브러리와 똑같은 방법으로 access 할 수 있습니다.

    link 타임에서 C와 CPP 의 차이는 네임맹글링입니다.

    C 는 컴파일한 object 파일에 함수들이 함수명 그대로 노출되지만, CPP 는 함수 오버로딩 등의 기능을 위해서 노출되는 함수명에 리턴타입과 파라미터타입목록 같은 걸 포함시킵니다. 이걸 네임맹글링이라 부르고, 네임맹글링은 표준이 없기 때문에 컴파일러마다 다르게 생성합니다.

    결론적으로 extern "C" 선언에 포함시킨 것들은 공유 가능합니다.




  • __jj__
    628
    2020-10-29 16:05:23

    3. 절대로 불가능하지 않습니다.

    C++로 만든 DLL을 java에서도 호출해서 사용할 수 있거든요.

    JNI로 중간 인터페이스를 만들어서 java에서 호출이 가능하답니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.