2009-05-21 7 views
1

VB6로 작성된 DLL이 여러 개있는 응용 프로그램에서 작업하고 있습니다. VB6 코드에는 COM dll 및 ocx 컨트롤이 포함됩니다. 나머지 코드는 C++과 C#입니다. 64 비트 아키텍처와 호환되는 응용 프로그램 코드를 만들기위한 작업이 할당되었습니다. 도움말 자료는 C/C++ 코드에서 사용 가능하므로 문제가되지 않습니다. 그러나이 vb6 코드를 모두 .net이나 다른 언어로 다시 작성하여 64 비트와 호환되도록하는 것은 쉽지 않습니다. 또한 모든 기본 논리를 이해할 수 없으므로 재 작성이 문제가되지 않는다고 가정합니다.64 비트 응용 프로그램의 vb6 COM dll로드/상호 작용

우리 모두는 VB6 dll이 64 비트 환경에서 작동하지 않는다는 것을 알고 있습니다. 그래서 내 선택은 무엇입니까.

1) 각 DLL을 32 비트로로드되는 EXE로 변환하고 COM 인터페이스를 통해 나머지 64 비트 응용 프로그램과 상호 작용할 수 있습니다. 이 접근 방식에 문제가있을 것으로 예상됩니까?

2) 레지스트리를 편집하고 모든 VB6 dll을 프로세스에서로드하여 dllhost에로드합니다.

3) 하나의 32 비트 exe를 만들고 해당 exe에서 이러한 VB6 dll을 모두 참조하고 32 비트 주소 공간에 해당 exe를로드하고 응용 프로그램의 64 비트 부분이 32 비트 exe와 통신합니다.

위에서 언급 한 모든 접근법을 생각해 볼 때 가장 큰 문제는 OCX 컨트롤과 관련이 있습니다.

아이디어가 있으십니까? 위에서 언급 한 것보다 새로운 아이디어가 당신에게 선호되는 이유와 그 이유는 무엇입니까?

+0

당신이 COM을 사용하여 32 (64) 사이의 통신을 수행하는 방법을 알아 냈나요? 아직도 일종의 불일치가있는 것처럼 보입니다. –

+0

아니요, 아직 실험을 시작하지는 않았지만 성공이나 실패가 발생하는 즉시 업데이트 할 예정입니다. – Paragon

+0

이러한 통신은 정상적으로 원활하게 작동해야합니다 - 특히 모든 인터페이스가 사용자의 경우와 같이 호환 가능할 때 원활하게 작동해야합니다. –

답변

0

프로세스 내에서 실행되는 기존 VB6 코드가 많은 경우 먼저 64 비트로 마이그레이션하는 것이 효과적인지 질문합니다. 64 비트는 서버 응용 프로그램에 많은 이점을 제공하지만 데스크톱 응용 프로그램의 경우 32 비트는 종종 충분합니다. 그리고 WOW64는 적어도 10 년 동안 사용 가능할 것으로 예상되기 때문에 64 비트 Windows에서 32 비트 응용 프로그램을 실행하는 것에 대해 거의 이야기하지 않습니다.

외부 또는 프로세스 서버를 사용하여 앱을 조정하여 64 비트 모드로 실행하는 것이 적어도 부분적으로 가능할 수도 있지만, 이는 성능에 중요한 영향을 미칠 수 있습니다 (또한 메모리 오버 헤드). 따라서 고객이 64 비트 버전의 앱을 선택하면 전혀 도움이되지 않습니다.

즉 2) 또는 3)이 자연스러운 선택이라고 할 수 있습니다. 2) 확실히 구현하기 쉽지만 3) 아웃 - 오브 - 프로세스 서버의 수와 수명을 관리하는 방법을 더 많이 제어 할 수 있습니다.

+1

귀하의 모든 관심사를 이해합니다. (그러나 문제는 내 응용 프로그램이 AutoCAD의 추가 기능으로 실행된다는 것입니다.) 그리고 AutoDesk에서는 64 비트 버전의 AutoCAD를 64 비트 Windows에서 실행해야하는 경우 64 비트 버전의 AutoCAD를 구입해야합니다. 64 비트 윈도우에서 WoW 모드로 AutoCAD를 설치하십시오. 따라서 64 비트 모드에서 실행해야합니다. 선택의 여지가 없습니다. 설치 한 고객에게 64 비트 버전의 응용 프로그램을 제공 할 수 밖에 없습니다. 64 비트 창 – Paragon

+0

결정을 내리기 전에 고려해야 할 중요한 부분은 AutoCad 프로세스와 (32 비트) OOP 서버간에 통신이 얼마나 많이 발생하는지 평가하는 것입니다. 자주 사용되는 개체 , 나는 그들을 C++이나 64 비트 프로세스에서 호스팅 될 수있는 언어로 다시 구현하는 것을 진지하게 고려할 것입니다. 자주 사용되지 않는 객체의 경우 out-of-process 솔루션이 적합 할 수 있습니다. 이러한 고려 사항 때문에 out-of-process 전략이 실제로 실현 가능한지 여부를 판단하는 것은 어렵습니다. –

+0

쉬운 출구가 없습니다. 우리는 코드를 다시 작성하기로 결정했습니다. – Paragon

0

SQL 2000 x86에서 SQL 2008 x64로 마이그레이션 중입니다.

여기에도 비슷한 문제가 있습니다. DCOM을 사용하기로 결정했습니다.

어떻게 작동합니까?

서버가 32 비트이면 어셈블리를 호스팅하고 64 비트 컴퓨터는 DCOM을 사용하여 호출합니다.

성능 저하가 있습니다. BTW, 재작 성에 비교 된 노력 ... 확실히 가치가있는 일. :)

안부, 마르코스 리마

관련 문제