- Open SSL 라이브러리로 https Test 방법
- by innovation
- 모니터와 스크린 정보를 가져오는 법
- by innovation
- 완성형한글 지원문자 표현방법
- by innovation
- WDF CoInstaller의 동작방식
- by innovation
혁신적이면서 상당히 광범위하고 간간히 전문적인 상식과 진실에 기초한 정신과 이노의 본격 아나키 블로그
스크린 정보를 찾아보려고 C++ 하던 버릇대로 GetsystemMetrix부터 뒤져보다가 우연히 발견
그래 이런건 클래스로 지원해줘야지
procedure TfrmMonitorTestMain.btnMonitorClick(Sender: TObject); var Screen : TScreen; Monitor : TMonitor; I : Integer; begin Screen := TScreen.Create(Self); try for I := 0 to Screen.MonitorCount -1 do begin Monitor := Screen.Monitors[I]; mmInfo.Lines.Add(Format(‘Monitor %d: Primary – %s’, [I, BoolToStr(Monitor.Primary, True)])); { mmInfo.Lines.Add(Format(#9+ ‘Left: %d’, [Monitor.Left])); mmInfo.Lines.Add(Format(#9+ ‘Top: %d’, [Monitor.Top])); mmInfo.Lines.Add(Format(#9+ ‘Width: %d’, [Monitor.Width])); mmInfo.Lines.Add(Format(#9+ ‘Height: %d’, [Monitor.Height])); } mmInfo.Lines.Add(Format(#9+ ‘BoundsRect : (%d, %d, %d, %d)’, [Monitor.BoundsRect.Left, Monitor.BoundsRect.Top, Monitor.BoundsRect.Right, Monitor.BoundsRect.Bottom])); mmInfo.Lines.Add(Format(#9+ ‘WorkareaRect: (%d, %d, %d, %d)’, [Monitor.WorkareaRect.Left, Monitor.WorkareaRect.Top, Monitor.WorkareaRect.Right, Monitor.WorkareaRect.Bottom])); end; finally Screen.Free; end; end;
최근 ESC/POS 포맷을 지원하는 POS용 열전사 프린터를 지원해야 할 일이 있었다.
Serial Port기반으로 AnsiString을 지원하는 매우 단순한 포맷으로 대부분 별 문제가 없었는데 역시나 대부분의 구형포맷이 그렇듯 한글출력에서 문제가 발생했다.
UnicodeString을 기본포맷으로 지원하는 델파이는 AnsiString은 별도 포맷으로 지원하고 있는데(아마도 2009 이후) 별다른 설정을 하지 않으면 OS의 Codepage를 따라간다.
결국 AnsiString으로 선언하여 String을 대입하면 CP949포맷으로 입력되는데 문제는 POS프린터가 CP949가 아닌 euc-kr만을 지원한다는 것.
‘똠‘이나 ‘뷁‘과 같은 euc-kr이 지원하지 않은 문자를 같이 입력하면 프린터가 심하게 깨지면서 출력되는 문제가 발생하여 자료를 찾아보았다.
델파이가 유니코드 기반으로 바뀌면서 새롭게 만들어진 스트링포맷인 AnsiString을 그냥 ASCII기반의 문자열 포맷이라고 생각하는 사람들이 대부분인데 코드를 들여다보면 다국어 처리 및 코드페이지에 대해 많은 고민을 하고 만들어진 포맷이라는 것을 알 수 있다.
기능에 대한 많은 내용들은 Delphi, AnsiString 등으로 검색하면 나오니 각설하고...
완성형만을 지원하는 (확장 완성형말고 그냥 완성형)기기에 출력하기 위해서는 CodePage를 정확히 지정해줘야 한다. 처음에는 euc-kr이 유닉스 포맷이고 표준으로 지정되지 않았기 때문에 지정된 코드페이지가 없는줄 알고 멘붕했으나 MSDN을 뒤지다 보니 euc-kr도 코드페이지가 있다는 사실을 알았다.
type EucKrString = type AnsiString(51949); var str : string; ansi : EucKrString; begin str := ‘똠방각하’; ansi := str; ShowMessage(String(ansi) + IntToStr(StringCodePage(ansi))); end;
출력되지 않는 문자는 ?로 변경되는 것을 볼 수 있다.
MFC 프로젝트가 아닌 코드에서 리소스를 추가하면 가끔 “cannot open include file ‘afxres.h’“란 에러가 나는 경우가 있다.
나의 경우는 드라이버 탬플릿으로 프로젝트를 만들면 이런 에러가 나서 MS가 미친게 아닌가 생각했었는데 검색해보니 해결방법이 있었다.
http://howtofix.pro/vs-2012-fatal-error-rc1015-cannot-open-include-file-afxres-h/
위에 MCF 라이브러리를 까세요. 뭐 이런 얘기는 넘어가고 중간에 보면...
This header is a part of the MFC Library. VS Express edition doesn’t contain MFC. If your project doesn’t use MFC you can safely replace afxres.h with windows.h in your terrain2.rc.
이 헤더는 MFC 라이브러리에 포함되어 있습니다. VS Express 에디션은 MCF가 없지염. 만일 프로젝트에서 MFC를 사용할 수 없으면 windows.h로 afxres.h를 안전하게 대체할 수 있습니다.
(물론 리소스에서 참조할 때 이야기)
잘된다. MFC를 전부 써야할 필요가 없는데 저런 에러가 나면 시도해보시라.