.cpp 및 .h 소스 파일을 표시하지 않고 다른 프로젝트에서 사용하기 위해 Visual Studio C ++ 프로젝트 내보내기

Zorx

나는 비주얼 스튜디오 프로젝트가 있습니다.

"TopSecretProject"

헤더 파일을 포함하여 내 코드를 공개하지 않고 익명의 개발자 사용자와 공유하고 싶습니다 (내 .h파일에는 내 프로젝트의 구조가 포함되어 있으므로 사용자가 알 수 없음).

사용자는 다음을 받아야합니다.

  1. (사용자가 가지고있는 권한에 따라) 그가 호출 할 수있는 함수 이름 목록과 사용자는 이러한 함수를 블랙 박스로 사용하여 프로그램을 개발할 수 있어야합니다.
  2. TopSecretProject그가 열 수 없다는 나의 봉인 .

이 시나리오는 어떤 식 으로든 가능합니까?

다음 해결책을 시도했지만 실패했습니다.

  1. TopSecretProject정적 라이브러리로 내보내기 .
  2. 사용자를위한 새 VS 프로젝트를 만들고 사용자 프로젝트에 추가합니다 .lib.
  3. 모든 .h 파일을 사용자의 프로젝트에 복사하고 미리 컴파일 된 헤더 파일을 만듭니다.
  4. 헤더 제거 (이제 .pch더 이상 필요하지 않음)

미리 컴파일 된 헤더는 모든 실행에서 다시 빌드되므로 첫 번째 미리 빌드 된 pch를 제거합니다. 또한 pch를에서 직접 복사하려고 시도했지만 TopSecretProject도움이되지 않았습니다.

미리 감사드립니다 !!

안토니

최종 사용자가 호출 할 수 있는지 여부에 관계없이 미리 컴파일 된 헤더의 내 보낸 함수 선언은 pch (또는 라이브러리)에서 쉽게 추출 할 수 있습니다. 미리 컴파일 된 헤더를 전달하려고 할 때 골칫거리 일뿐입니다. :-)

대신 최종 사용자가 사용할 수있는 기능이 선언되어있는 최종 사용자를위한 헤더 파일을 만드는 것은 어떻습니까? 함정은 각 권한 집합에 대해 헤더 파일을 만들어야한다는 것입니다 (하지만 이것이 각 집합에 대해 사용 가능한 함수를 지정하는 것보다 더 어렵습니까?).

그러나 라이브러리의 다른 기능을 사용하려는 경우 누구든지 라이브러리의 내 보낸 기호를 볼 수 있습니다.

편집하다:

클래스와 관련하여 실제로 클래스 선언을 제공하지 않으려면 클래스와 상호 작용할 수 있도록 클래스 위에 일부 레이어를 구현해야합니다. 이 문제를 해결할 수 없습니다. 이것은 아마도 두 가지 경로 중 하나를 의미합니다.

하나 : 클래스 생성, 파괴 및 사용을위한 일부 함수를 선언하고 좋은 ole 'void * 포인터를 다시 전달할 수 있습니다. 예 :

typedef void * MySecretClass;

MySecretClass initializeMSC( ... );
void freeMSC( MySecretClass cls );
int useMSC( MySecretClass cls, int param, ... );

2 : 기본적으로 동일한 작업을 수행하는 래퍼 클래스를 만들 수 있습니다.

class MySecretClassWrapper
{
   public:
      MySecretClassWrapper( void );
      int useClass( int param );

   private:
      void * mySecretClassData; // <-- actual class instantiated here
};

그리고 컴파일 된 정의 :

MySecretClassWrapper::MySecretClassWrapper( void ) {
   mySecretClassData = reinterpret_cast<void *>(new MySecretClass);
}

int MySecretClassWrapper::useClass( int param ) {
   MySecretClass * object = reinterpret_cast<MySecretClass *>(mySecretClassData);
   return object ? object->useClass(param) : -1;
}

첫 번째는 C 애플리케이션에서 C ++ 클래스를 사용할 때 사용하는 방법입니다. 두 번째는 똑같은 아이디어이지만 C ++ 사용자가 사용하기 더 쉬운 클래스로 래핑되었습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관