2011-08-20 3 views
5

DELPHI 애플리케이션을위한 외부 모듈 시스템을 구현하는 가장 좋은 방법은 무엇입니까? 내가 필요로 무엇외부 모듈 구현

정말 아주 기본입니다 : 모듈이 존재하고 부하가 (실행 시간)

  • 모듈 형태로 저장할 수있는 경우

    • 주요 APP는
    • 모듈 DataModules
    • 를 저장할 수 있습니다 검출
    • 모듈 수 상점 코드

    다른 양식 내부의 저장 양식을 사용해야하며 독립형으로 만 사용하십시오.

    나는 그래서는 TForm 클래스를 만들 수 있지만, TPanel과 내부에 배치이

     if Assigned(pNewClass) then begin 
          Application.CreateForm(pNewClass, _lFrm); 
          _lFrm.Hide; 
          _lFrm.BorderStyle := bsNone; 
          _lFrm.Parent := pBasePNL //(TPanel); 
          _lFrm.Align := alClient; 
         end; 
    

    같은 것을 사용합니다.

    DataModules의 경우, 필자는 ImageList를 저장하여 Idea가 외부 모듈을 조금만 변경하여 앱 ICO를 변경하기 때문에.

    그래서 이것을 달성하는 가장 좋은 방법은 무엇입니까?

    런타임 BPL을 살펴 보았지만이를 수행하는 방법을 이해하지 못하는 것 같습니다. 감사합니다. .

    업데이트 :

    을 ......................................................

    몇 가지 관련 질문 및 답변을 읽은 후 나는 내 대답과 해결책을 찾았다 고 생각합니다.

    http://edn.embarcadero.com/article/27178

    기사는 오래된 물건이지만 놀라 울 정도로 간단합니다.

    음 논리는  나는 그냥 양식을 표시 얻을하지 않는 것이

    난 그냥 예 2

    그것은 BPL을로드하지만 양식을하지 않습니다를 테스트입니다 :

    AClass := GetClass('TForm2'); 
    

    이 등록 된 항상 retrievex '전무'

    그러나 BPL :

    ,
    RegisterClass(TForm2); 
    

    아무도 도움이 될 수 있습니다.

  • +1

    플러그인을 찾으면 더 많은 정보를 찾을 수 있습니다. –

    +0

    이것은 실제로 복제본입니다. 오른쪽의 관련 질문 목록을 참조하십시오. –

    +0

    감사합니다. 그냥 거기에 내 솔루션을 발견. – Jlouro

    답변

    2

    데모를 만들었 기 때문에 시작하기가 쉽습니다! 그러나 ... 시작은 끝나지 않았습니다.

    플러그인을 사용할 때마다 나중에 후회했습니다. 그러나 바이너리 플러그인 시스템이 필요합니다. 따라서 BPL은 올바른 솔루션입니다. 데이비드는 전체 런타임 패키지 BPL 대신 일반 DLL을 사용하여 인터페이스를 사용하는 것이 좋습니다. 그러면 클래스 버전 지정이 없으므로 일반적으로 발생하는 BPL 불안정성 문제가 해결되므로 응용 프로그램 및 패키지 바이너리 호환성 종속성, 정확히. 메모리를 공유 할 필요가 없으며 borlandmm.dll (공유 메모리 관리)을 사용할 필요가 없으면 인터페이스가있는 직선 DLL이 정상적으로 작동합니다.

    스크립팅만으로 필요한 모든 작업을 수행 할 수 있고 스크립트만으로 플러그인 시스템을 만들면 그렇게 할 수 있습니다. DLL, 인터페이스 및 메모리 공유가 없으면 일반 DLL을 사용하십시오. 메모리 및 클래스 유형을 공유해야하는 경우 그렇다면 BPL을 사용하십시오.

    BPL (런타임 패키지)을 사용하면 예상하지 못한 많은 부작용이 발생합니다. 내가 작업 한 가장 큰 BPL 기반 응용 프로그램은 내가 작업 한 모 놀리 식 응용 프로그램보다 엉망이고 덜 안정적입니다. 패키지를 시험해보기 전까지 패키지를 소나무로 만드는 것이 가능할 것 같습니다. 그리고 나서 발견합니다. 다시 한 번 소나무를 발견합니다.

    BPL 패키지를 올바르게 사용하고 플러그인의 버전을 올바르게 지정하면 모든 것이 정상입니다. BPL은 훌륭합니다. 그러나 현실 세계에서는 정상적인 버전 관리와 ABI 호환성 및 상호 운용성 및 안정성이 중요한 것으로 보입니다.

    업데이트 : 데모를 만들었습니다. here (plugin_r2.zip)입니다. Delphi XE에서 수행되었지만 이전 버전의 델파이를 사용하는 경우 .dproj 파일을 삭제하고 기본 응용 프로그램의 .dpr 파일과 패키지의 .dpk 파일을 엽니 다.

    +0

    내가 필요한 것은 양식, 데이터 모듈 및 리소스를 BPL 내부에 저장하는 것입니다. 목표는 주 APP에 대한 추가 모듈을 작성하여 클라이언트에게 제공하는지 아닌지를 지정하는 것입니다. 주 건물을 만들 때마다 모듈 (BPL)을 재건합니다. 델파이 버전은 내가 2007 년에 일하는 문제가 아니며, 언젠가는 확장 성을 유지할 계획이다. 지금 작동하지 않는 것은 GetClass입니다. – Jlouro

    +0

    나는 당신에게 데모를 만들었고, 마지막 링크는 위의 답변을 참조하십시오! 델파이 XE를 사용하고 있지 않다면, DPROJ 파일을 삭제하고 .dpr 파일을 열면 여전히 작동합니다. –

    +0

    DEMO에 감사하지만 "mainFormMainUnit1.pas"가 없습니다. – Jlouro

    4

    패키지는 쉬운 솔루션이지만 하나의 큰 단점이 있습니다. 패키지를 사용하면 플러그인 작성자가 Delphi뿐만 아니라 동일한 버전의 컴파일러를 사용하게됩니다.

    개인적으로 많은 인터페이스를 통해 앱의 기능을 공개하는 것이 좋습니다. 이로써 Delphi 이외의 언어에서 액세스 할 수 있습니다.

    일반적으로 플러그인은 DLL로 구현되며 앱을 나타내는 루트 인터페이스에서 전달할 함수를 내 보냅니다. 그런 다음 플러그인은 해당 인터페이스의 메소드를 호출하여 양방향 상호 작용을 설정합니다.

    +1

    질문 상태로 Datamodules 및 Delphi 양식을 반환하려는 경우이 조언은 유용하지 않습니다. 반환 된 양식은 어쨌든 델파이와 버전에 따라 달라질 것입니다. –

    +0

    그러나 사람들에게 상어가 서식하는 바다에서 멀리 떨어져있는 사람들에게 경고하는 것이 좋습니다. 따라서 David에게는 +1입니다. –