2013-04-16 2 views
1

함수 및 클래스를 내보낼 DLL을 작성하고 있습니다. 하지만 지금은 기능 수출에 대한 질문이 있습니다. 내 함수 서명이 보이는 경우Win32 DLL 내보내기 함수 매개 변수 모범 사례

는 :

__declspec(dllexport) int fn1(FILE *theFile); 

가 나는 파일을 정의 때문에 포함해야 하는가? 가장 좋은 방법은 무엇입니까? 그리고 사용자 지정 형식을 사용하거나 반환하는 함수를 내보내려면 이러한 형식의 헤더 파일을 내 보낸 헤더 파일에도 포함해야합니까?

+1

일반적으로 헤더 파일의 모범 사례에 대한 질문이 많아서 DLL이나 Windows와 관련이 없습니다. – jamesdlin

+0

여러 모듈에서 FILE *을 사용하는 경우 모든 모듈이 동일한 CRT DLL을 사용해야 함을 유의하십시오. –

답변

5

표준 라이브러리 유형 및 기능을 전달하지 마십시오. 그것이 라이브러리 헤더가 제공되는 것입니다. 귀하의 파일로 배치해야합니다

#ifndef MYLIBRARY_H 
#define MYLIBRARY_H 

#ifdef MYLIBRARY_EXPORTS 
#define MYLIBRARY_EXPORT __declspec(dllexport) 
#else 
#define MYLIBRARY_EXPORT __declspec(dllimport) 
#endif 

// required headers 
#include <stdio.h> 

// exported/imported functions 
MYLIBRARY_EXPORT int fn1(FILE *theFile); 

#endif 

귀하의 DLL 프로젝트는 일부 또는 정의 처리기 매크로 (구성 어떤 방법의 수), 및 DLL의 소비자가 할 하지 그것을 정의로 정의 MYLIBRARY_EXPORTS으로 내장되어 있습니다.

이것은 마법사가 제공 한 DLL 프로젝트 생성기에 사용되는 일반적인 레이아웃입니다. 프로젝트에서 동일한 작업을 수행하는 것도 고려하십시오. 무엇보다 필요한 라이브러리를 정의하기 위해 필요한 표준 헤더를 포함하고 이것이 제공하는 것이 무엇인지 정의하십시오.

+0

질문에 대한 사용자 정의 유형은 무엇입니까? –

2

일반적으로 헤더 파일은 자체 포함되어야합니다. 헤더 파일을 사용하는 클라이언트는 자신의 헤더를 포함하기 전에 #include "xyz.h" 행이 필요하다는 것을 알 필요가 없습니다. (다른 xyz.h 헤더가 똑같은 것을 상상해보십시오. 모든 헤더 파일의 엄격한 순서를 알아야합니다. 이는 악몽 일 것입니다.)

그러나 반드시 필요한 것은 아닙니다. #include 몇 가지 유형의 헤더. 예를 들어, 전달 선언을 대신 사용할 수 있습니다.

관련 문제