1.마이플랫폼 - 공통

Edit

1.1vsview report와 chartFX 는 unicode를 지원하지 못함

1.1.1현상

사용자 PC의 환경에 따라 언어 표현은 잘되지만, 다른 나라 언어 표현 시 글자가 깨지는 현상이 발생함(한국어로 설정된 PC에서 중국어로 표현 시 등등)

1.1.2대안

다국어 지원되는 chart나 report를 사용할 것 (윈도우 98에서 작동 안 될 수 있음)

1.2Internet Explorer(이하IE) 에서 MiplatformX 를 사용할 때

1.2.1현상

Miplatform V3.1 Wantallkeys라는 속성을 true로 하면 모든 keyboard값을 다 사용한다는 의미로 사용되는데. 이때 f1 key와 f10 key는 Miplatformx.ocx에서 사용한다고 하더라고 IE가 이 key를 별도로 사용함.

F1은 help를 실행하고 f10은 메뉴가 activate 됨. ms사에서 이 F1,F10 key를 무조건 먼저 사용함.

1.2.2대안

IE에 embbeding을 하는 한 대안은 없으며 IE에서 사용 시 f1,f10 key는 MiPlatform도 사용하고 IE에서도 사용하게 됨. 전용브라우저를 사용하면 이 문제를 피할 수 있음.

1.3Local DB작업시 ADO로 personal oracle과 연동 시 문제점

1.3.1현상

Personal Oracle이나, Oracle DB를 Local DB adaptor로 접근할 때 Active Data Object(이하ADO)를 사용 시 오류가 있음

Connect를 한 뒤, 조회/update할 때 마다 windows handle 자원이 2씩 증가하고, 줄어들지 않는 현상

종종 종료 시 Miplatform이 zombie상태로 process가 남아있음.

원인은 Ms사의 ADO driver와 Oracle사의 ADO용 Adaptor COM module이 서로 잘 맞지 않아서 발생하는 현상으로 oracle사의 ADO 및 OLE DB관련 patch가 있으나, patch하여도 종료 시 Miplatform이 zombie상태로 process가 남는 현상이 종종 발생함.

1.3.2대안

Local DB Adaptor에서 Oracle을 사용 시 자사에서 제공하는 AdatorDBoraXXX.dll을 사용할 것

AdaptorDBoraXXX.dll은 Oracle사에서 제공하는 OCI function을 이용하여 제작한 것으로 OracleDB와는 안정성이 좋으며, 최적의 성능을 보임.

1.4Miplatform 전용Browser에 WebBrowser 컴포넌트를 사용 시 문제점

1.4.1현상

MiPlatform 내에 IE를 포함하고, 다시 IE내에 Miplatform을 넣거나, 그 Miplaform 내에 다시 IE ActiveX를 넣는 등, ActiveX를 중첩되게 사용할 경우에 발생하는 현상으로, Microsoft Foundation Classes (이하 MFC)의 메시지 처리 루틴이 Focus관련 메시지를 수행할 때, 처리해야 할 Window를 제대로 찾지 못하는 경우에 무한루프가 발생해 스택 오버플로우가 발생하는 현상임.

MFC의 ActiveX 메시지 loop 버그로, Miplatform form 안에, IE ActiveX 를 embedding하고, 그 ActiveX안에 Miplatform ActiveX를 넣어서 처리할 경우, MFC ActiveX 메시지 loop에서 제대로 return해 주지 않는 문제로 대안이 없음.

1.4.2대안

MFC를 사용하는 한 대안이 없음. Miplatform V3.2에서는 이런 식의 코딩을 피할 것.

1.5Microsoft사의 RichTextBox component를 Miplatform에서 사용 시 문제점

1.5.1현상

PID 종료현상

Miplatform에 ActiveX로 Microsoft RichTextbox Component를 사용하는 경우, Appearance또는 BorderStyle, ScrollBar등 일부 속성이 적용된 RichTextbox를 포함하는 Form을 편집한 후 폼을 닫는 경우 PID가 비정상 종료되는 현상이 발생함.

Miplatform 종료현상

Miplatform에 ActiveX로 Microsoft RichTextbox Component를 사용하는 경우, Appearance또는 BorderStyle, ScrollBar등 일부 속성이 적용된 일부 Form을 닫거나, 다른 폼으로 이동하는 경우, Miplatform이 비정상 종료됨 (단 UsePeristData속성을 false로 한 경우에만 종료됨)

1.5.2대안

PID 종료현상

  1. RichTextbox 가 포함된 편집할 폼을 제외한 모든 폼을 저장 후 닫는다.

  2. 해당 Form을 편집한다.

  3. 편집된 Form을 저장하고 Form을 닫거나, PID를 종료한다.

    (이때, Form을 닫아도 PID는 비정상 종료됨. 단, 저장은 성공함.)

  4. 다시 PID를 기동해 다음 편집작업을 계속한다.

Miplatform 종료현상

RichTextbox 의 UsePeristData를 True로 등록하여 개발하고, 사용할 것.

1.6OnKillFocus에서 Open 사용 불가

1.6.1현상

MiPlatform의 각 컴포넌트들의 OnKillFocus에서 Modal 형태인 Alert/Confirm/Dialog의 메시지처리는 정상작동하나 Modalless 형태인 Open 의 메시지처리는 MiPlatform이 오 동작.

1.6.2대안

KillFocus에서의 Open은 사용자의 작성오류라고 봐야 함. 이와 같은 경우를 사용하지 않도록 해야 함.

1.7Form의 Scroll Property의 기본값 복원 안 됨

1.7.1현상

Form에 명시적으로 TRUE로 설정된 경우는 TRUE로 전환할 수 있지만, PID에서 Form의 Scroll값이 TRUE인 경우 저장하지 않음.

1.7.2대안

FormXML이 로딩되기 전에 MainForm/ Div/TabPage/Dialog/Open등의 각각에 설정된 기본값으로 Scroll의 값을 초기화한다. 따라서 PID에서 Scroll을 true로 선택해 저장 한경우 저장이 되지 않는 특성 때문에 기본값에 따라 동작하게 된다.

MainForm은 기본값이 TRUE이며, Div/TabPage/Dialog/OpenWindow는 모드 기본값이 FALSE이다. 그러나, Design시에 Div/TabPage의 ScrollProperty를 FALSE에서 TRUE로 설정해 저장하는 것으로 기본값을 TRUE로 변경할 수 있다. 또한 Dialog/OpenWindow는 Dialog/OpenWindow를 생성하는 Dialog()/Open()함수의 인자중에 OpenStyle에 ‘Scroll=true’를 추가하는 것으로 기본값을 TRUE 변경할 수 있다.

1.8OnDrop이 처리되지 않은 경우 상위 폼으로 전달되지 않음

1.8.1현상

각 Component의 DropMode가 TRUE이고, OnDrop/ OnDragEnter/ OnDragOver /OnDragLeave의 경우 각 Event가 처리되지 않은 경우 상위 Form에서 각 Event가 발생하지 않음.

그러나, 각 Component의 DropMode가 FALSE인경우 Form의 해당이벤트가 발생함.

Miplatform V3.1에서 입력이 관련된 Event중 각 Component에서 뿐만 아니라 전체적으로 처리될 필요가 있는 경우(OnRButtonDown, OnRButtonUp, OnMouseOver, OnMouseLeave, OnKeyDown), 각 Component에서 해당 Event를 처리하지 않으면 Form에서 처리할 수 있도록 설계하여 해당 Event가 발생하게 됨. 그러나, Drag&Drop 계열의 경우 상위 Form으로 발생하지 않음.

Form의 Drag & Drop 관련 Event의 경우 해당 Event가 초기 설계 시에 위와 같은 사항을 고려하지 않고 설계되어 발생한 문제임.

1.8.2대안

Drag & Drop 계열의 입력 이벤트의 경우, 해당 Component의 DropMode가 FALSE로 설정되면, Drop을 Form이 대신 받으므로 Component의 DropMode를 FALSE로 설정하는 것으로 전체적인 처리를 할 수 있음.

특정 Component에서 Drag & Drop을 받지 않고자 하는 경우 DropMdoe를 TRUE로 설정하고, 각 Drag & Drop의 이벤트 내에서 Return값을 “NONE”으로 주어 Drop을 받지 않겠다는 표시를 하는 것으로 처리할 수 있음.

DropMode를 TRUE로 준 상태에서 Form의 Drop과 같은 처리를 하고자 하는 경우, 별도로 구현하거나, Form의 Drag & Drop을 구현한 Event Handler를 함수형태로 호출 하여 사용할 수 있음.

1.9MFC로 제작된 ActiveX 컴포넌트에 TrackpopupMenu 함수 사용 시 오류

1.9.1현상

MFC로 제작된 ActiveX 컴포넌트 객체로 script에서 trackpopupMenu 함수의 objObject값으로 주고 호출시 모든 메뉴 item이 disable되는 현상

TrackPopupMenu(strDatasetID,strLevelColID,strMenuIDColID,strTextColID,strStatusColID,strImageColID,nXPos,nYPos,strCallBackFunc, objObject, nRow, nCell);

내부 작동원리는 다음과 같다

TrackPopupMenu 함수의 objObject는 이 objObject의 window handle로 popup menu를 생성하여 dataset의 정보대로 리스트를 나열하게 되는데, 이때 objObject의 child로 popup menu가 생성됨.

문제는 MFC ActiveX에서는 이 popup Menu item에 대해 enable/disable할수 있는 기능이 제공되지 않음으로 인해 문제가 발생하였음.

1.9.2대안

Microsoft support : 해당 Error에 대한 Microsoft의 공식 입장을 적은 페이지.

http://support.microsoft.com/kb/q141199/

이 자료를 참조하여 내부적으로 조치하여도 MFC application에서 이 MFC ActiveX컴포넌트를 삽입하여 trackpopup을 생성시켜도 enable되지 않음.

대안으로는 TrackPopupMenu의 objObject를 해당ActiveX객체로 주지 말고, form object를 대신하여 사용하고 좌표정보를 보정하여 사용할 수 있음.

TrackPopup menu에 대한 처리는 callback함수에서 처리하면 되므로 이상 없음.

1.10MS internet Explorer에 MiplatformX를 embedded하여 사용할 때, 화면로딩 시 종종 늦어지는 현상 발생

1.10.1현상

Ms Internet Explorer에 MIplatform ActiveX를 embedded하여 사용할 때, script에 idle함수를 이용하면 CPU가 100%되면서 늦어지는 현상, 매번 발생하는 현상이 아니며, 불특정 하게 늦어졌다, 빨라졌다 하는 현상이 나타남.

이 원인은 MS internet Explorer의 iframe화면과, miplatformX의 화면이 동시 로딩되는 경우에 특히 잘 발생되는 것으로 보임.

MIplatform의 idle함수는 내부적으로 window에 Message pump에 쌓여있는 message를 단순히 꺼내어, 강제로 메시지내용들을 수행시켜, 결과를 얻을 때 종종 사용하게 되는데, MS의 internet Explorer와 Message pump를 같이 사용할 경우, 메시지 수행을 강제로 수행 시 화면 로딩이 종종 늦어지는 현상이 나타나게 됨.

1.10.2대안

전용 브라우저에서는 문제가 없으나, MS의 Internet Explorer에서는 idle 함수 사용 시 MS사의 internet Explorter에서 cpu 를 100% 사용하게 되면서, 잠시 멈춰지는 현상이 나타나게 됨.

이 문제는 문제발생시 thread를 확인해 본 결과이므로, 되도록 idle 함수를 사용하지 않음으로써 이 문제를 피할 수 있음.

idle 함수 사용은 좀 더 신중히 판단하여 사용할 것.

1.11Tablet PC에서 MiPlatform 3.1 기동 시 CPU점유율이 100%되는 현상

1.11.1현상

Tablet PC에서 MiPlatform 3.1 ™을 기동할 때, 간혹 또는 자주 CPU 점유율이 100%가 되면서 MiPlatform이 정상적으로 기동하지 못하는 현상이 나타남.

MiPlatform 3.1이 정상적으로 로딩 완료되지 못할 뿐 아니라, 시스템 전체에 속도를 저하시킨다. 따라서 MiPlatform을 강제 종료하게 됨.

다음 3가지 조건이 모두 만족할 때 증상이 나타나는 것으로 확인되었다.

1.11.2대안

다음 대안들 중에서 1가지를 조치하면 증상은 나타나지 않는다.

1

다음과 같은 방법으로 IME의 설정 창을 연다.

아래 그림과 같이 IME의 오른쪽에 붙은 ‘▼’모양을 클릭해 나온 메뉴에서 ‘설정(E)’을 클릭한다.

그림 1-1test

2

다음과 같은 설정 창이 뜨면, ‘고급’ 탭을 선택한다.

3

‘모든 프로그램에 고급 텍스트 서비스 지원 확장’ 체크박스가 켜져 있으면 선택을 해제하고, ‘확인’을 누른다.

4

다음과 같은 메시지가 발생하면 ‘예’를 눌러 시스템을 다시 시작한다.

1.12일부 Component의 Property가 해당 Component의 Event Handler에서만 실패하는 경우

1.12.1현상

MiPlatform에서 기본제공되는 Component의 속성 중 일부 속성에 대해 해당 Component의 Event가 진행중인경우 변경이 제한되어 ‘~~프로퍼티 값 변경에 실패했습니다.’라는 메시지가 발생함.

제한된 Component와 속성 목록은 아래 표와 같다.

Component

Property

Combo

Editable

TextArea

HScroll

VScroll

Calendar

MonthOnly

변경이 제한된 Property는 해당 Component의 Event Handler내부에서 변경을 제한 한 것이며, 해당 Event Handler가 아니면 변경할 수 있다.

화면에 Combo1이라는 Combo가 있고, Combo1의 OnChagned 의 Event Handler가 Combo1_OnChanged라면 Combo1_OnChange와 Combo1_OnChanged에서 호출한 함수에서는 Combo1의 Editable을 바꿀 수 없다.

단, Combo0라는 Combo가 추가적으로 있는 경우 Combo1의 Event Handler에서 Combo0의 Editable을 변경 하는 데에는 제약이 없다.

위와 같은 제약을 한 이유는 위 표 에서 명시된 Property들의 경우 해당 Component의 Window를 재 생성 하는 과정이 변경 과정에 포함되기 때문이다. 따라서 해당 Event Handler 안에서 변경을 허용할 경우 MiPlatform의 동작이 비정상 종료될 수 있어 제한하였다.

1.12.2대안

위의 Property들에 대해 동작 시에 변경해야 하는 경우, SetTimer를 통해 변경 시점을 해당 Event Handler가 처리를 완료한 다음에 Property를 변경하거나, 다른 Component의 Event Handler에서 표에 명기된 Property를 변경하도록 해야 한다.

1.13Destroy Form API를 사용한 뒤 MiPlatform이 비정상 종료하는 현상

1.13.1현상

Destroy Form API를 사용해 특정 Component를 파괴한 뒤 해당 MiPlatform이 비정상 종료하는 현상은 파괴된 Component에 대해 접근을 시도하기 때문에 MiPlatform이 죽는 현상으로 봐야 한다.

첫 번째 경우는 Event Handler의 obj를 통하거나, Object등을 사용하여 Component의 ID가 아닌 Object를 바로 접근하도록 작성된 Code중에 Destroy가 있는 경우 MiPlatform이 비정상 종료할 수 있다.

Function OnClick(obj)
{
    Var obj_dead = Combo0;
    Destory(obj_dead.id);
    obj_dead.MoveWindow(0,0,100,100); <- 비정상 종료됨
}

두 번째 경우는 특정 Component의 Event Handler를 수행하는 도중 Destroy등을 사용해 Event를 발생한 Component가 파괴될 때 해당 증상이 나타날 수 있다. 이와 유사한 경우로, 특정 Component에서 자신을 포함하는 Form/Tab/Div의 Contents를 바꾼 경우와 같은 이유에서 MiPlatform이 비정상 종료될 수 있다. (단, 이 경우 Form/Tab/Div의 SyncContents 프로퍼티가 TRUE로 설정되어 있는 경우에만 발생한다.)

Function Combo0_OnChanged(obj)
{
    Destroy(obj);
} <- 경우에 따라서 비정상 종료됨

1.13.2대안

첫 번째 원인에 대해서는 Destroy를 사용한 다음에 해당 Component를 접근하지 않도록 스크립트를 수정해야 합니다. 혹은 다시 Component의 ID를 통해 해당 Component로 접근해도 위의 현상은 일어나지 않습니다.

Function OnClick(obj)
{
    Var objid = “Combo0”;
    Destory(objid);
    Object(Objid).MoveWindow(0,0,100,100); <- 에러 발생 후 정상 진행됨
}

두 번째 원인에 대해서는 SycnContents의 사용을 자제해야 하며 Event Handler를 벗어난 시점에서 해당 Component가 파괴될 수 있도록 SetTimer등을 사용해 죽는 현상을 피해야 함.

Function Combo0_OnChanged(obj)
{
    SetTimer(1,100);
}
Function Form_OnTimer(obj,nEventID)
{
    If( nEventID == 1 )
    {
        KillTimer( 1 );
        Destroy( Combo0.id );
    }
}

1.14TeeChart 사용 시 Form의 파괴와 함께 MiPlatform이 비정상 종료됨

1.14.1현상

1.14.2대안

원인은 TeeChart가 파괴되는 순간 Windows Message Pump를 강제로 수행하게 되며, 이 과정에서 MiPlatform의 Form파괴가 중복으로 발생하게 되어 MiPlatform에서 메모리 처리 오류가 발생하는 것으로 확인 되었다. 따라서 아래의 2가지 방법 중 한가지를 택하여 처리하면 된다.(QC 3563)

1.15ContoureCube 사용 시 알려진 버그

1.15.1현상

1.15.2대안

1.16NewWindow(Ex) 함수 사용 시 알려진 버그

1.16.1현상

MDI로 실행되는 경우 NewWindw(Ex)함수 사용 시 Minimize로 띄울 경우 Icon이 보이지 않을 수 있다.

MDI로 실행되는 경우 NewWindow(Ex)함수를 사용해서 새 window를 띄운다. 이때 Window를 Maximize, Normal, Minimize형태로 띄울지 설정할 수 있다. 이 중에서 Minimize형태로 Window를 띄울 때 Main화면 하단에 Minimize된 Window가 ICon형태로 표현된다. Minimize되었을 때 ICon정보는 화면 XML안의 Icon Property-> NewWindow(Ex) 함수 호출 시 첫 번째 인자에 해당하는 FormID에 설정된 IConID->ShortCuts의 Default ImageID순이다.

NewWindow(Ex)의 첫 번째 인자인 FormID가 StartXML의 Forms에 설정된 FormID가 아니고, shortCuts의 Defualt ImageID가 없을 경우에 화면 XML에 Icon Property가 있더라도Icon이 보이지 않는다.

일반적으로 Window가 Normal로 생성된 경우에 Window에 설정된 화면 XML안의 Icon Property에 값을 가져다가 Minimize가 되었을 때 ICon으로 표현해 주는데, Minimize로 Window를 생성하면 화면 XML을 Load하기 전에 이미 Window는 Minimize되어 버리므로 ICon정보를 얻어올 수 없어 ICon을 그릴 수 없다.

1.16.2대안

보다 정확한 Icon을 주고 싶을 경우에는 NewWindow(Ex) 함수의 첫 번째 인자에 해당하는 FormID를 StartXML안의 Forms에 정의하고 IConID를 설정한다. ShortCuts의 ImageID에 Default Icon을 설정한다.

1.17Vista에서 Aero Glass 테마 사용 시 MDI의 System Button을 타이틀 바에 그리지 못함

1.17.1현상

Windows Vista 에서는 DWM(Desktop Window Management)라 하여 기존 테마와는 다른 형태의 UI 엔진이 탑재되었다. DWM의 가장 뚜렷한 효과는 Non-Client 영역의 반투명화다. Vista의 기본 테마인 Aero에 DWM이 적용된 반투명 효과가 더해진 테마를 Aero Glass 테마라고 한다. 이 기능을 활성화하기 위해선 그래픽 카드가 128MB 이상의 메모리, DirectX 9 지원, Pixel Shader 2.0 및 32bit 렌더링을 지원해야 한다.

MiPlatform을 전용 브라우저로 실행하고, MDI이며, 메뉴바가 없을 경우에, MDI창을 전체 화면으로 전환했을 때 MDI의 시스템 버튼이 타이틀 바에 위치하게 된다. Windows XP 이하의 OS에서는 이를 구현할 때 Non-Client 영역에 시스템 버튼을 자체적으로 그릴 수 있다.

반면, Windows Vista 는 Non-Client 영역을 DWM을 통하여 별도로 관리하여 Non-Client 영역에 그린 모든 것을 무효화한다. Microsoft는 Non-Client 영역에 컨트롤을 놓지 않고, 표준 Window Frame 을 사용할 것을 권장하고 있다.

1.17.2대안

1.18Division 또는 TabPage에서 Dialog나 Open 윈도우를 사용할 때 Parent가 되는 Division이나 TagPage 파괴 시 비정상종료

1.18.1현상

1.18.2대안

1.19한글 입력시 Edit의 OnChar에서 PreText가 완성문자열로 출력됨

1.19.1현상

1.19.2대안

1.20EnforcedIgnoreInput Property를 MS Internet Explorer에서 MiPlatformX를 임베디드해서 사용할 경우 사용 제한

1.20.1현상

1.20.2대안

1.21Vista에서 Areo기능 사용 시 프린트 다이얼로그창이 사라지지 않고 남는 문제

1.21.1현상

비스타의 에어로 기능 중 프린트다이얼로그가 늦게 사라지는 것이 있다. 다이얼로기가 다 사라지기 전에 화면을 캡쳐 하면 이러한 현상이 발생한다.

1.21.2대안

SaveScreen으로 화면을 저장 후 출력

1.22Open으로 폼을 열고 그 폼에서 Alert창을 띄운 후, 다른 창에서 그 Open된 창을 닫았을 때 비정상 종료됨

1.22.1현상

1.22.2대안

Open으로 창을 열고 그곳에서 Alert명령을 사용하게 되면, 다른 창에 포커스를 이동할 수 있어 사용자가 언제든지 Open 창을 닫을 수 있으므로, Alert명령과 동일한 효과를 낼 수 있는 Dialog명령을 써서 해당 기능을 대체해야 함. 이때 사용자는 마우스로 다른 어떤 창도 클릭할 수 없으므로 비정상 종료는 일어나지 않음.

Alert 대신 Dialog명령을 사용하는 방법은 다음과 같음.

function Button1_OnClick(obj) {
    //alert("this is alert!);

    var msg = "this is alert!";//alert로 보여줄 문구
    var xx = '<?xml version="1.0" encoding="euc-kr"?>';
    xx += '<Window>';
    xx += '<Form Id="test" Title="Alert" >';
    xx += '<Static align="center" Bottom="30" Height="25" Id="IE0" Left="0" Right="10    0" Top="5" Width="100" Text="';
    xx += msg;
    xx += '"/></Form></Window>';

    Dialog(xx, "", 100, 50); //alert를 대체한 부분
}

1.23Div의 스크롤 위에 다른 프로그램을 올려 놓은 후 스크롤을 시키면 마우스 이벤트가 작동하지 않음

1.23.1현상

그림 1-2test2

1.23.2대안

1.24Dataset 에서 Null/ Empty 구분 못하는 문제

1.24.1현상

1.24.2대안

1.25Grid Cell Copy/Paste

1.25.1현상

1.25.2대안

1.26ExcelExport시 Cell사이즈 문제

1.26.1현상

1.26.2대안

정확한 사이즈로 출력해야 할 경우, SaveExcel을 사용할 것.

1.27Grid SubProperty ImeMode 문제

1.27.1현상

1.27.2대안

Cell Edit 비활성화인 상태에서 먼저 활성화(Enter를 입력 등)처리를 한 후 사용.

1.28일본어 확장한자 문제

1.28.1현상

1.28.2대안

MiPlatform에서는 정상적인 동작을 보장하지 않음.

1.29HTML화면의 IFrame에서 PopupDiv가 있는 창(폼)을 띄운 후 닫을 경우 IE브라우저가 맨 뒤로 숨는 문제

1.29.1현상

  1. <iframe id="install_miplatform" …>

  2. * window.open(HTML, "install_miplatform", …); // Iframe에 마이플랫폼 Updater가 있는 html페이지를 open. (이때 내부적으로 업데이터 -> 마이플랫폼 실행 -> PopupDiv를 추가한 화면(폼) open됨)

  3. open된 마이플랫폼 화면 닫기.

  4. IE브라우저가 랜덤 하게 맨 뒤로 숨는 현상 발견.

1.29.2대안

위와 같은 조건일 경우의 대안은 없음.

1.30Dialog를 띄운 상태에서 부모 창을 go로 변경시킨 후 Dialog창을 종료할 때 비정상 종료 문제

1.30.1현상

  1. 부모창을 GO 명령을 통해 변경하게 되면 내부적으로 새로운 쓰레드가 생성됩니다.

  2. 새로운 쓰레드에서는 일련의 작업을 진행하게 되고 그 작업 결과를 처리하기 위해 메시지 루프 쪽으로 관련 메시지를 전달하게 됩니다.

  3. 이때 메시지를 처리하는 부분이 부모창이 아닌 모달창으로 전달이 되어 작업 중을 나타내는 wait 상태처리 등을 진행시키게 됩니다.

  4. 미처 통신이 완료되지 않은 상태일 경우 wait 상태처리를 계속 해 줘야 하는데 Dialog창을 닫아버리게 되면 wait 상태처리를 하기 위한 내부 자원 핸들값이 무효화되는 반면 메시지 루프에서의 처리는 계속 진행됩니다. 이 경우 시점차이로 인해 그 핸들값이 올바르지 않는 상태로 처리될 수도 있는데 이 상태에서 비정상 종료 현상이 발생됩니다.

1.30.2대안

1.31MS office 365, 2016 버전의 2017년 03월 패치부터 엑셀 Export 결과물이 변형되는 현상

1.31.1현상

MS office 365, 2016 버전을 사용하는 시스템에서 엑셀 export 결과물이 기존과 다른 모양으로 나타나는 현상입니다. 2017년 3월 이후의 패치 버전으로 업데이트 시 해당 현상이 나타납니다.

구체적인 현상은 아래와 같습니다.

오류 현상

처리 여부

column width 가 반영되지 않음

엑스플랫폼 내부에서 보완, 수정 (2017년 5월 정기)

font name, color, size 가 반영되지 않음

엑스플랫폼 내부에서 보완, 수정 (2017년 5월 정기)

data가 없는 cell 이 나타나지 않음

엑스플랫폼 내부에서 보완, 수정 (2017년 6월 정기)

cell align 이 반영되지 않음

보완 불가

merge 된 그리드를 출력 시 모양 변경

보완 불가

1.31.2대안

현상이 발생하기 이전의 office 업데이트 버전(16.0.7870.2038)으로 다운그레이드합니다.

  1. Windows 시작 버튼을 마우스 우측 버튼으로 클릭 후 실행을 선택합니다.

  2. 실행 창에 아래 내용을 복사 붙여넣기 후 확인을 누릅니다.

    "C:\Program Files\Common Files\microsoft shared\ClickToRun\officec2rclient.exe" /update user updatetoversion=16.0.7870.2038

  3. 다운그레이드가 완료되면 문제가 해결되었는지 확인합니다.

하위 빌드로 다운그레이드하였기 때문에 재업데이트 시 같은 문제가 나타납니다. 엑셀 실행 후 [파일 - 계정 - 업데이트 사용 안 함] 설정을 통해 Office 업데이트를 해제하여 사용하시면 됩니다.