2013-10-08 3 views
0

을 깨는 후 MFC에서 작동이 중단 (예를 들어 MyActiveX)를 MFC에서 사용되는 :VB6 액티브 내가 VB6 액티브 X가 호환성

m_pControl = new CWnd; 
m_pControl->CreateControl("MyActiveX.MainControl", 
          "", 
          WS_VISIBLE, 
          rc, 
          this, 
          5000, 
          NULL, 
          FALSE, 
          NULL); 

가 좀 되지 않는 기능을 제거하거나 VB에서 ActiveX 밖에 사용하지 않는 (가변 이동하면), VB6에서는 호환성 문제에 대해 경고합니다. 호환성을 깨뜨리기로했지만 VB6 ActiveX가 MFC 응용 프로그램에서 제대로 표시되지 않습니다.

내가 알기로 인터페이스 호환성 및 유형 라이브러리에 새로운 UUID가 생성됩니다. 그게 다시 작동하도록 뭔가 할 수있는 한 괜찮아요, 그리고 이후 문자열을 사용하여 ProgID MyActiveX.MainControl, 내 MFC 응용 프로그램이 영향을받지 않아야한다고 생각합니다.

편집 : 내가 Resetting project compatibility in vb6에서 알고있는 것처럼
, 호환성을 파괴하는만큼 내가 그것을 참조 프로젝트를 재건으로 괜찮습니다. 하지만 MFC에서 문자열을 사용하여 VB 프로젝트를 참조하는 경우 MyActiveX.MainControl 그래서 MFC 응용 프로그램을 다시 빌드해야하는지 알 수 없습니다. 심지어 내 C++ MFC 응용 프로그램을 다시 작성한 후에도 VB ActiveX가 제대로 표시되지 않습니다.

VB6 ActiveX에서 실제로 C++ MFC에서 사용되는 두 가지 기능 만 있습니다. 그래서 VB6 ActiveX 내에서만 사용되는 다른 함수와 변수를 제거하거나 이동했습니다. 따라서 왜 제대로 표시되지 않는지 잘 모르겠습니다.

답변

0

No. VB6이 옳습니다. 문제는 사용하는 인터페이스, 속성 및 이벤트에 관한 것입니다. MFC에 컨트롤을 통합하는 방법에 따라 다릅니다. 모든 DispIds (IDispatch 인터페이스의 디스패치 ID)가 안정적이고 사용하는 모든 기능을 사용할 수있는 한 문제는 없습니다.

DispID가 변경되면 함수 프로토 타입이 변경되어 문제가 발생합니다.

+0

안녕하세요, 귀하의 답변에 감사드립니다. C++ MFC에서 실제로 사용되는 VB6 ActiveX의 두 가지 기능 만 있습니다. 그래서 VB6 ActiveX 내에서만 사용되는 다른 함수와 변수를 제거하거나 이동했습니다. 그래서 왜 제대로 표시되지 않을지 잘 모르겠습니다. –

+0

OleViewer에서 이전 인터페이스와 새 인터페이스를 확인하십시오. 동일한 DispIds를 사용하는 한 문제가 없습니다. – xMRi