2011-02-05 3 views
2

저는 C++ 코딩을 처음 사용합니다.더 나은 성능을 가진 것은 : 시스템 호출을 통해 C++에서 Perl 스크립트를 실행하거나 DLL 파일을 호출합니까?

C++ Visual Studio Win32 응용 프로그램에서 Perl 스크립트 (장비를 제어 함)를 실행하고 싶습니다. 이 점에서 가장 최적화 된 접근 방식이 무엇인지 궁금합니다.

  1. 시스템 기능을 호출하고 해당 Perl 파일을 실행하십시오.
  2. DLL을 만들고 C++ 코드에서 DLL을 호출하십시오.

옵션 2 사용하지 않았지만 최선의 방법이라면 배우고 구현할 수 있습니다.

답변

7

"가장 최적화 된"방법은 응용 프로그램에서 embed Perl입니다.

두 번째 옵션은 실제로 가능하지 않습니다. AFAIK. Perl이 컴파일되지 않았으므로 다른 옵션은 첫 번째 옵션에 따라 인터프리터를 호출하는 것입니다 (예 : system() 또는 exec() - 가족 호출).

이제 인터프리터를 코드에 포함하고 한 줄의 코드를 작성하여 외부 프로그램을 호출하는 것과는 상당한 차이가 있으므로 필요한 최적화 정도를 정확히 고려해야합니다. 성능 차이는 최소화 될 수 있으므로 먼저 성공을 측정하면서 쉬운 방법을 시도해보십시오.

5

필자는 Oystein이 공유 라이브러리에 perl 스크립트를 컴파일하는 좋은 방법을 찾지 못할 것이라고 동의합니다.

그러나 C++ 프로그램에서 생성하는 perl 만 다른 옵션이 아닙니다. 또한 두 프로그램간에 데이터를 파이프하거나 소켓을 사용하여 데이터를 전달하거나 다른 IPC 방법을 사용할 수도 있습니다. 내 백업 도구에서

+0

나는 OP가 C++과 Perl 코드간에 데이터를 공유 할 의도가 없다는 인상을받지 못했습니다. 결국 시스템 호출이 제안 되었습니까? – Oystein

+0

@Oystein : perl의 기본 모드는 명령 행 인수가있는 경우이를 처리하고 그렇지 않으면 stdin에서 읽습니다. 그래서 시스템을 사용하면 명령 당 새로운 프로세스가 필요할 수 있습니다 (장비 제어라고 함). 파이프를 사용하면 perl의 단일 인스턴스가 전체 일련의 명령을 처리 할 수 ​​있습니다. –

+0

나는 그걸 생각하지 않았다. +1 – Oystein

-1

내가 한 번 system("perl script.pl")를 호출했지만, 그것은 윈도우에 매우 느리게 실행 (20-30초 당 통화 정도 테스트 벤치 마크에서 script.pl 아무것도하지 않았다하더라도). 에 리눅스 그것은 매우 빨랐다.

관련 문제