2012-02-10 7 views
1

.NET에서 Delphi (win32) 양식을 열고 .NET MDI 양식에 Delphi 양식을 포함시키고 싶습니다. 델파이 DLL에서 익스포트 된 메소드를 호출하면 폼을 임베드하는 데 아무런 문제가 없지만 일반적으로 바로 가기 및 키보드 이벤트에 문제가 있습니다. 우리는 그것이 호환되지 않는 messageloops 때문이라고 생각합니다. 그런 다음 델파이 DLL의 내 보낸 프로 시저에서 별도의 .NET 스레드로 Application.Run을 실행하려고 시도했지만 처음에는 작동하지만 두 번 이상 폼을 열려고하면 실패합니다. 누구나 할 수있는 방법을 알고 있습니다 : Win32 Delphi Form을 .NET Winform에 포함 시키시겠습니까?Win32 Delphi 폼을 .NET Winform에 포함하는 방법

@All : 우선 응답 해 주셔서 감사합니다. 우리는 우리의 문제에 대한 해결책을 찾았습니다 : 우리는 Delphi Application.Run을 창을 시작하는 내 보낸 프로 시저로 옮겼습니다.

+1

양식을 액티브 X로 노출하면 작업을 수행 할 수 있습니다. –

+0

ActiveX 방식이란 Delphi 응용 프로그램이 .Net 양식의 컨트롤이며 .Net 양식이 폼 수준 핫키 창 메시지 처리를 수행한다는 것을 의미합니다. .net 윈도우에있는 델파이 윈도우보다 훨씬 더 멋지게 작동합니다. –

답변

0

델파이 응용 프로그램을 별도의 프로세스에서 실행하여 델파이 창에 대한 부모 윈도우를 MDI 컨테이너 (기본값 : HWND 0이 아닌 데스크톱)에 설정하고 프로세스간에 필요한 모든 데이터를 마샬링합니다 일반적인 프로세스 간 메시징을 사용합니다.

다시 말하지만, 이것은 본질적으로 양식을 ActiveX 개체로 노출하는 것과 같습니다. Google 크롬의 접근 방식을 사용하고 창/탭을 별도의 프로세스로 분리하는 것을 좋아합니다.

+0

이봐, 목에 통증이 있기 때문에, 나는 완벽하게 실행 가능하지 않다. – Zenexer

+0

나쁘지 않은 생각입니다. 그러나 이것이 마술처럼 모든 단축키를 만들고 키보드 단축키가 제대로 작동하는지 의심 스럽습니다. 예를 들어 임베디드 프로세스가 부모 앱에 올바르게 속한 키보드 단축키를 공유하거나 전달하는 방법은 무엇입니까? –

+0

그래, 그는 여전히 그 일을해야 할거야. – Zenexer

2

소스가있는 경우 .NET 코드를 생성하는 Delphi Prism으로 이식 해 볼 수 있습니다. 비록 VCL을 사용하고 있다면, 당신은 힘든 싸움을하고 있습니다. Delphi 2006은 .NET에서 VCL을 구현했지만 Prism은 VCL 어댑터가없는 .NET 용 Object Pascal입니다.

사용할 수있는 다른 도구는 Hydra입니다. 개인적으로 사용하지는 않았지만 .NET과 "기존"Delphi간에 interop을 제공한다고합니다. 그들이 주장하는대로 작동한다면 이전 Delphi 코드를 .NET 응용 프로그램으로 전환하는 것이 가장 좋습니다.

+0

프리즘은 C#으로 다시 작성하는 것만 큼 많은 작업을합니다. 그러나 히드라는 몇 가지 상호 운용성을 제공하며 실제로 도움이 될 수 있습니다. +1 히드라. –