크로스 플랫폼 내 프로세스 동적 라이브러리 바인딩에 대한 C ++ 래퍼에 대한 권장 사항 (예 : 가벼운 고성능 COM 또는 CORBA) [폐쇄

StackOverflow https://stackoverflow.com/questions/1854323

문제

우리는 앱의 소비자가 자체 독점 알고리즘을 제공 할 수 있도록 플러그인 "아키텍처"가있는 응용 프로그램을 개발하고 있습니다. (우리는 기본적으로 파서 세트가 있고 제 3자가 자신의 것을 제공 할 수 있도록합니다)

도메인 공간은 매우 고성능이 필요하므로 프로세스 외 바인딩이 작동하지 않으며 Corba 및 COM과 같은 헤비급 물건을 남겨두고 있습니다.

기본적으로 우리는 간단한 크로스 플랫폼 래퍼를 찾고 있습니다.

  • 상대 경로에서 라이브러리를로드합니다
  • 특정 dll/.의 매핑을 일부 구성/이름에 제공합니다.
  • 필요한 기능을 제공하기 위해 일부 초기화를 수행하고 라이브러리를 쿼리하십시오.

나는 이것이 실제로로드 리브러리 () 주위를 감싸는 것이라고 생각하며 메소드 호출은 내보내기입니다. 우리는 이것을 스스로 쓸 수 있지만, 우리는 우리가 접시에 충분한 것처럼 기존 코드를 사용하고 싶습니다.

다시, 처리량과 성능은 매우 중요합니다.

비슷한 질문은 다음과 같습니다.

com에 대한 교차 플랫폼 대안 - 이것은 가깝지만, 우리는 프로세스 내만을 원합니다. 프로세스가 필요하지 않으며 우리의 요구는 약간 "가벼운 무게"입니다.

C ++ 크로스 플랫폼 동적 라이브러리; 리눅스와 창

이것은 관리되지 않는 C ++를위한 것입니다 - .net을 사용할 수 없습니다.

편집 - 우리가 찾은 것

우리는 그것을 발견했습니다 포코 우리의 요구에 적합합니다. 보너스로 이 페이지 C ++ 개발 상태와 언어 방향에 대해 대단히 감사 한 의견입니다 ...

Poco가 제공하는 것은 간단한 크로스 플랫폼 랩핑이었습니다. 실제로는 많지 않지만 여전히 우리에게 시간과 테스트를 절약합니다. 런타임 중에 추가 오버 헤드가 없습니다.

도움이 되었습니까?

해결책 2

나는 이것이 또한 효과가 있다고 생각합니다.http://pocoproject.org/docs/poco.sharedlibrary.html

다른 팁

그만큼 에이스 라이브러리에는 크로스 플랫폼이 작동하는 동적 라이브러리 로딩을위한 포장지가 포함되어 있습니다. 평범한 부하 직접보다 편안함을 원한다면 타오 에이스 오브. Tao와 함께 Corba를 사용하는 것은 극도로 성능이 뛰어나며 Tao가 최적화함에 따라 프로세스 호출에 사용하는 경우 특히 자체 제작 플러그인 인프라를 능가합니다.

동적 라이브러리 크로스 플랫폼 래퍼 사용을 사용합니다 ACE_DLL. 언급 한 Loadlibrary () 주변의 가장 기본적인 크로스 플랫폼 래퍼를 제공합니다.

Ace_dll을 사용하는 것과 tao를 사용하는 것 사이에서 서비스 구성 프레임 워크 객체를 동적으로로드 할 수있는 에이스. 로드 후 구현 한로드 된 객체에 대한 업 캐스트 포인터를 얻을 수 있으며로드 된 객체의 모든 메소드를 호출 할 수 있습니다.

그렇게하는 코드는 다음과 같습니다.

char const * const cpc_myClass = ACE_DYNAMIC_SERVICE_DIRECTIVE(
  "myclass",
  "dllname",
  "_make_MyClass",
  ""
);
result = ACE_Service_Config::process_directive(cpc_myClass);
MyClass * p_obj = ACE_Dynamic_Service<MyClass>::instance ("myclass");
p_obj->callAnyMethodYouLike();

여기 Tao는 두 가지 유형의 콜로레이션 최적화 (Thru_poa 및 Direct)를 알고 있다고 설명합니다.

직접 전략을 사용할 때, 배치 된 개체의 메소드 호출은 POA의 상태를 확인하지 않고 하인에게 직접 호출됩니다.

올바르게 사용하면 TAO가 얼마나 효과적 일 수 있는지 놀랄 수도 있습니다. 간단한 개념 증명을 만들고 측정을 수행하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top