문제

나는 전화에 관심이 있습니다 삭스, 다른 Windows GUI 프로그램의 오픈 소스 콘솔 애플리케이션 (Delphi에서 자연스럽게 작성). 콘솔 창을 긁어 내고 숨기는 대신 응용 프로그램을 응용 프로그램에서 호출 할 수있는 DLL로 변환하고 싶습니다.

이 길을 시작하기 전에 얼마나 많은 일을 기대 해야하는지 궁금합니다. 우리는 주요 사업에 대해 이야기하고 있습니까, 아니면 간단한 해결책이 있습니까? 나는 c를 알고 있지만 결코 전문가가 아닙니다.

SOX 특정 세부 사항을 기대하지 않고 일반적으로 DLL로 Exe 콘솔 응용 프로그램 변환만을 기대합니다. 누군가가 Sox에 익숙하다면 더 좋습니다.

도움이 되었습니까?

해결책

C 소스 코드를 수정하여 콘솔 실행 파일을 라이브러리로 바꾸는 특정 주제의 경우 명령 줄 애플리케이션이 어떻게 포함되는지에 따라 다릅니다. I/O가 작은 함수 세트 나 더 나은 기능 포인터를 통해 퍼지는 방식으로 작성되면 분명히 사소한 것입니다.

printf, scanf 및 친구로 모든 것이 완료되면 모든 소스 파일에 포함 된 파일을 찾거나 작성하고 작성된 매크로 및 친구를 쓴 자신의 기능으로 리디렉션하는 매크로를 추가하여 가장 잘 어울릴 것입니다. DLL 구현에 적합합니다. printf와 같은 것들은 vsnprintf (안전을 위해 n- 버전 사용)에서 구축 할 수 있으므로 전체 C RTL I/O 하위 시스템을 다시 구현할 필요가 없습니다. 그러나 VSSCANF는 없지만 웹에는 타사 구현이 있습니다.

코드가 fprintf, fscanf 등을 사용하여 파일과 콘솔 사이의 간접화를 활성화하는 경우에도 여전히 운이 좋지 않습니다. 파일 구조는 불투명하며 Pascal 텍스트 파일과 달리 휴대용 텍스트 파일 드라이버를 구현할 수 없습니다. 특정 C RTL에 Spelunk가 있더라도 여전히 가능할 수 있지만 매크로 경로를 따라 내려 가서 자신의 이름이 바뀌는 파일 유형을 다시 구현하는 것이 좋습니다.

마지막으로, "Popen ()"접근 방식은 Delphi에서 가능하며 Ttextreader 및 TtextWriter 클래스를 통해 Delphi 2009에서 다소 쉬워졌습니다. 이를 파이프 주위에 감싸는 tfilestream과 결합하고 새로운 프로세스 및 STARTF_USESTDHANDLES에서 표준 입력, 표준 출력 및 표준 오류를위한 파이프를 지정하면 작동합니다. 자신의 글을 쓰고 싶지 않다면 델파이 웹에 타사 동등한 / 샘플도 있습니다. 여기 하나가 있습니다.

다른 팁

Windows에서는 그냥 전화하십시오 CreateProcess SOX 명령 줄이 있습니다. Win32의 Delphi 바인딩을 모르지만 Win32와 C#에서이 정확한 작업을 수행했습니다.

그리고 이제 CreateProcess가 당신이 호출하고 싶은 것임을 알았으므로 Delphi에서이를 수행하는 방법에 대한 Google 검색은 필요한 모든 코드를 제공해야합니다.

Delphi Corner 기사 - CreateProcess를 사용하여 프로그램을 실행합니다

CreateProcess ()를 쉽게 호출합니다

DLL이 필요하지 않을 수도 있습니다. Popen () 함수 콘솔 애플리케이션을 실행하고 출력 텍스트를 수집합니다.

면책 조항 : 나는 Sox에 대해 아무것도 모른다. 코드가 쉽게 만들 수 있도록 구성되어 있거나 더 어려울 수 있습니다. 어느 쪽이든, 프로세스는 동일합니다.

먼저 호출하려는 SOX 응용 프로그램에서 기능을 찾고 싶습니다. 대부분의 콘솔 앱에는 명령 줄을 구문 분석하고 적절한 기능을 호출하는 코드가 있습니다. 먼저 사용하려는 기능을 찾으십시오.

다음 으로이 사이트에서 C에서 DLLS의 함수 내보내기에 대한 정보를 확인하십시오. DLL 생성 및 사용

그런 다음 대상이 DLL 인 새로운 MakeFile 또는 Visual Studio Project 파일을 만들고 내보내기 위해 수정 한 SOX 프로그램의 SourceFiles를 추가하십시오.

과정, Indiv가 조언하는 방식을 실행하고 Adam이 보여준 방식과 같이 출력을 포착하십시오.

그러나 여전히 DLL 변환을하고 싶다면 시작하게됩니다.

  1. Windows 용 Sox를 구성하고 컴파일하십시오
  2. C ++ 도구를 사용하여 빈 DLL 프로젝트 생성
  3. 프로젝트의 일부로 SOX 파일을 추가하십시오.
  4. dllmain이라는 새 기능을 추가하십시오

    bool apientry dllmain (핸들 hmodule, dword ul_reason_for_call, lpvoid) {return true;}

  5. DLL에 내보내기를 나열하는 .def 파일 (프로젝트 이름을 파일 이름으로 사용) 추가 - 다음 내용을 추가하십시오.

    LIBRARY      "name.DLL" 
    

    수출

    Calloldmain 개인

  6. Sox의 메인을 Calloldmain으로 바꾸십시오

  7. 출력 / 반환 오류를 기록하기 위해 사용자 정의 기능을 작성하십시오.

  8. Sox 응용 프로그램에서 모든 printfs / cout를 찾아 위의 사용자 정의 기능으로 호출하십시오.

  9. DLL이 컴파일되면 이제 동일한 매개 변수로 CalloldMain 함수를 호출 할 수 있습니다. 이 서명을 수정하여 위에서 오류 / 출력을 반환 할 수 있습니다.

툴체인이 무엇인지 언급하지는 않지만 Windows에서 GCC를 구성하면 일반 구성을 사용할 수 있습니다. SOX를 컴파일하도록 설치하십시오. 이 과정에서 DLL 파일과 콘솔 앱이 생성됩니다. 또는 DLL 만 만들기 위해 Make Target을 지정할 수 있습니다. 이것은 MS C 런타임 DLL에만 의존하는 Windows 기본 라이브러리를 컴파일하며 자체 앱에서 사용할 수 있습니다.

콘솔 애플리케이션을 실행하고 파이프를 사용하여 출력을 캡처 할 수 있습니다. 파이프의 une 쪽을 CreateProcess의 stdout로 사용하고 다른 쪽에서 공통 파일처럼 읽습니다.

델파이에서 작성된 예제를 여기에서 볼 수 있습니다. http://delphi.about.com/cs/adptips2001/a/bltip0201_2.htm

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