나는 비주얼 스튜디오 프로젝트가 있습니다.
"TopSecretProject"
헤더 파일을 포함하여 내 코드를 공개하지 않고 익명의 개발자 사용자와 공유하고 싶습니다 (내 .h
파일에는 내 프로젝트의 구조가 포함되어 있으므로 사용자가 알 수 없음).
사용자는 다음을 받아야합니다.
TopSecretProject
그가 열 수 없다는 나의 봉인 .이 시나리오는 어떤 식 으로든 가능합니까?
다음 해결책을 시도했지만 실패했습니다.
TopSecretProject
정적 라이브러리로 내보내기 ..lib
..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] 삭제
몇 마디 만하겠습니다