2014-04-01 4 views
1

C++ DLL에서 메서드를 내 보낸 다음 VB.net 폼 응용 프로그램에서이 메서드를 호출했습니다. C++ 메서드는 현재 반환 값 (void)이 없지만이를 개선하고 일련의 오류 코드를 나타내는 int를 반환하고자합니다. (모두 잘되면 0을 반환 할 계획입니다.)C++에서 오류 코드 상수를 정의하는 위치

어디에서 어떻게 이러한 오류 코드를 정의 할 수 있습니까?

#define ERR_NEGATIVE_CELL_SIZE 1 
#define ERR_INVALID_FILE_PATH 2 
etc 

VB.net 응용 프로그램은 또한 코드를 기반으로 사용자에게 UI 메시지를이 같은 코드를 정의하고 표시합니다 :

나는 내 CPP 파일의 맨 위에 다음을 수행해야합니다.

명백하게 DLL에서 예외를 throw하고 VB.net에서 관련 예외 메시지와 함께 catch하는 것을 선호하지만 extern "C"__declspec (dllexport)을 사용하여 가능하지 않은 것 같습니다. 방법.

대체 디자인 패턴에 대해 듣고 싶습니다. 또한 C++ 콘솔 실행 파일을 통해 DLL 메서드를 노출 할 계획이므로 DLL에 오류 메시지를 한 번 저장하고 콘솔 및 UI 응용 프로그램에서 사용할 수 있도록하는 것이 이상적입니다.

답변

5

가능한 경우 전처리기를 사용하지 마십시오.

시나리오에서는 열거 형을 정의하는 것이 타당합니다. 함수 프로토 타입 옆에 정의하십시오. 번역을 노출하려면 번역 기능을 사용하고 내보내기 기능을 사용하십시오. 같은 뭔가 :

size_t TranslateError(int error, char* buffer, size_t size) 

반환 값 : 변환 된 메시지의 크기, 버퍼에 메시지의 경우 반환 < = LEN

5

당신은 오류 코드가 그들은 가장 배치되는 다른 컴파일 단위로 사용 가능하게하려면 헤더 파일에. 일반적으로 라이브러리 코드를 작성할 때 라이브러리를 사용하는 데 필요한 모든 상수, 유형, 함수 및 클래스를 선언하는 하나 이상의 헤더 파일을 만듭니다. 구현은 라이브러리에 컴파일됩니다. 라이브러리 소비자는 헤더와 가져 오기 라이브러리를 포함합니다.

상수에 대해서는 #define을 사용하여 상수를 선언하십시오. 그러지 마. 상수 또는 enum 사용을 고려하십시오. 전 처리기는 일반적으로 가능한 한 작게 사용합니다.