2019년 3월 10일 일요일

multi thread exception in MFC

-
referrence:
https://stackoverflow.com/questions/2797366/win32-thread-exits-unexpectedly
-
이런 기능이 있었다....
....
 The easiest way to find the problem would be to run your application under a debugger and enable breaking on Win32 Exceptions. Whenever a Win32 Exception is encountered, the application would break into the debugger and you can find out whats going wrong.

If ....
-
이런 것이 처음 나타났다. 하지만, debugger 에도 이것을 처리하는 break체크박스 옵션이 있었다.
네이티브' 프로그램이 -1073741511 (0xc0000139) 코드에서 끝났습니다.

Software.exe': 'C:\WINDOWS\system32\rpcrt4.dll' 로드, 기호가 로드되지 않았습니다.
'Software.exe': 'C:\WINDOWS\system32\version.dll' 로드, 기호가 로드되지 않았습니다.
'Software.exe': 'C:\WINDOWS\WinSxS\x86_Microsoft.VC**.DebugMFC_1fc8b3b9a1e18e3b_*.*.50727.762_x-ww_257740a4\mfc**d.dll' 로드, 기호가 로드되었습니다.
'Software.exe': 'C:\WINDOWS\WinSxS\x86_Microsoft.VC**.DebugCRT_1fc8b3b9a1e18e3b_*.*.50727.762_x-ww_5490cd9f\msvcr**d.dll' 로드, 기호가 로드되었습니다.
'Software.exe': 'C:\WINDOWS\system32\shlwapi.dll' 로드, 기호가 로드되지 않았습니다.
디버거:: 프로세스 로드 중에 처리되지 않은 비연속적 예외가 Throw되었습니다.
'[1720] Software.exe: 네이티브' 프로그램이 -1073741511 (0xc0000139) 코드에서 끝났습니다.

GetThreadId 라는 함수는 WindowsServer 2003에서만(?), 지원된다고 한다. ....
그래서 안되었던 것이다. 지원되는 OS가 아니라서.. ....
다른 함수를 골라서 사용하기로. .....

거의 찾은 듯하다. .....

    AFX_ISOLATIONAWARE_FUNC(BOOL, ImageList_Destroy, (HIMAGELIST himl), (himl), FALSE)
--------
거의 찾은 듯했으나.... 아니었다. Thread ID 등을 표시하는 것은 이 오류(예외)를 찾는 데에는 전혀 상관없는 삽질이었다. 이것을 고치는 방법은 전혀 다른 곳에 있었다. 기본적으로, 이것은 Multi-Thread _와는 본질적으로 무관한 오류였다.
일단 방법은, 위에서 찾은 Exception (한국어로 예외....) 메뉴를 Visual Studio (Visual C++) IDE에서 찾아서 (디버그(Debug) 메뉴(Menu) >>> 예외...(Exception...) 항목 클릭(click) 하면, 나오는 목록 상자에서 Win32 Exception(예외) 를 찾아서 C0000005 (C로 시작해서 000...이 이어지다가 5로 끝나는 것)을 체크하는 것이었다. 찾아보니, 통신이라든가 .. 와는 전혀 다른 것이었음이 밝혀졌다. Multithread 와는 전혀 관계가 없었다는 (좌절)이었다. 언제나 그렇지만, 어쨌든 찾은 것이 잘 된 것이다. 도움을 받지 않으면 이렇게 헤맨다.

하지만, 아직은 고치지 못한다. 찾아낸 그 부분을 보니, 여전히 어렵다. 다만, 엉뚱한 곳은 아니다. 위치는 찾았지만, 아직도 고치기는 확신이 서지 않을 정도로 어렵다.

-

2019년 2월 23일 토요일

[C++] 문장 따옴표 앞의 R

-
일단, 여기에서 봤다.
http://www.cplusplus.com/doc/tutorial/introduction/codeblocks/

여기의 테스트용 간단한 예제 프로그램에 아래와 같이 적혀 있었다.

#include <iostream>
int main()
{
  auto x = R"(Hello world!)";
  std::cout << x;
}

문장 큰 따옴표 앞의 R 이것이 무엇인고?
_( 검색:    R before " in C++  )_ 했다.
https://stackoverflow.com/questions/34988122/is-the-r-before-string-cross-platform

C++11 이후부터 표준화 되어서 도입된 날것(Raw) 그대로의 문장을 지정하는 것이란다.
https://en.cppreference.com/w/cpp/language/string_literal

이것이 가진 효과는 ? 아래의 프로그램을 참고하자. x 는 R 이 붙은 것이고, y 는 R 이 없는 것이다.
그리고, R이 붙은 것에는 따옴표 안에 괄호들이 하나씩 있어야 한다는 것이다. 따옴표 내부의 따옴표에 붙은 괄호는 문자열에서는 없어진다.
R이 붙지 않은 것에는 따옴표 내부의 괄호들이 출력된다.


#include <iostream>

int main()
{
    auto x = R"(Hello world!\n \r my world\nhello. my work!)";
    auto y = "(Hello world!\n \r my world\nhello. my work!)";
    std::cout << x;  std::cout << x;
  std::cout << x;
  std::cout << y;
  std::cout << y;
  std::cout << y;
// 한글일 때에는 ....ㅇㅇㅇㅇㅇ...    알수가 없다.
// 어떤 것이 있는가
//     std::c
}

실행 결과는 다음과 같다.
.... 라고 하려다가, 호기롭게 했지만, 역시나, 내가 linux에 적응하지 못하는 부류인 관계로, linux/unix 터미널 창 제어를 못해서... 결과를 복사하지 못했다... Code::Block 환경 내에서는 실행이 잘 되는데, 왜 나는 할 수 없지?  sudo 등등을 써 봐도, ./(실행파일_이름) 등등 내가 예전에 알고 있던 별 수를 다 써 봐도 안되고.. 실행 파일이 없다는 황당한 메시지만 받고, ls 명령을 해 보면 현재 디렉토리에 분명히 실행권한이 있는 파일이 존재하는데, 실행하려고 하면 없다고...
역시 나는 ...  이런 모든 것을 만든 분들이 위대해 보일 따름이다.

결국 설명은... R이 따옴표 앞에 붙으면, 보통-괄호(중간-괄호 또는 대괄호가 아닌..) _가  따옴표 바로 내부에 붙어야 한다. 그럼, 괄호 자신과 큰 따옴표도 들어갈 수 있다는 것이겠지...
하여간 그러면, \r, \n 이것들이 모두 해석되어서 CR(Carriage Return) 동작이라든가 NL(New Line)동작으로 작동하는 것이 아닌, 그냥 화면에 소스코드에 나온 그대로 \r   로 표시되고, \n  으로 표시된다. \ 문자(back slash)의 C/C++ 언어에서의 특수 해석이 작동하지 않는다는 것이다.
반면에, R이 없는 경우에는 \r 은 커서를 줄의 첫 자리로 옮기고, \n 은 줄을 바꾸는 기능으로 변환해석되어서 작동한다.

조금만 더 예를 들면,
x = R"Hello(Hello( (my ("") \r \n one))Hello";
였다면, x가 출력될 때에는
Hello(my ("") \r \n one)
이 출력되는 것이다. 표현하고 싶은 문자열을 감싸는 경계표시는 시작부분이
R"Hello(     로 시작되고, )Hello"   로 끝나고 이 경계표시는 실제 문자열에는 포함되지 않는다. 이 처음 괄호가 시작되기 전에 들어가는 경계표시 문자열에는 공백문자(스페이스)가 들어가면 안된다.
-
-

2019년 2월 22일 금요일

eos (Endless OS _가 아닌 다른 것) 그리고, 객체지향 프로그래밍, UML

-
eos _를 찾았더니, 예상치 않게 다른 eos 가 걸려 나왔다.

https://medium.com/hexlant/eos-dawn-v4-0-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%A4%ED%96%89-2-4-8ac29ad0f2ec

무슨 소리인가 했다. 요즘 세상에 관심거리였던, 이제는 실망거리이기도 한 비트코인과 관련된 블록체인 기술 소프트웨어였다.


https://saksin.tistory.com/1357

앞에는 맥OS에 설치하는 방법이었는데,
윈도(윈도10)에 설치하는 방법이 나오기도 했다. 그런데, 우분투를 먼저 윈도10에 설치하라는 재미있는 내용도 있었다.윈도10에 우분투라... MS 스토어였다.
https://www.microsoft.com/ko-kr/p/ubuntu/9nblggh4msv6?activetab=pivot%3Aoverviewtab
우분투의 console(terminal?)을 설치하는 것이라고 했다. ubuntu에서 사용하는 몇가지의 여러 shell 명령어를 사용할 수 있게 해 준단다. 모두가, 오래 전에 리눅스 등등의 open source unix 계열에 관심을 접었고 그 이후로 오랜 시간을 지낸 내게는 어리둥절한 혼돈스런 말들이었다. 모두가 뒤섞인다...

거기에는
https://saksin.tistory.com/921?category=405398
OOP _와 UML 등등의 내용도 있었다.
-
-
-

2018년 12월 30일 일요일

오늘 내 생애 처음으로 루빅 큐브 맞추기에 성공했다. (설명서 도움을 받았다.)

내가 루빅 큐브를 본 것은 큰형이 사와서 맞추는 것을 내게 자랑스럽게 얘기해 줬던 시절로 돌아간다. 아마도 내가 초등학교 2학년이나 3학년 정도였을 것이다. (8-9살??)
설명서를 읽어보기도 했지만, 쓰여 있는 뜻을 풀어내지 못했고, 그 이후로 40년이라는 세월이 흐르는 동안 설명서를 봐도 풀어내지 못하고 있었다. 고등학교를 졸업하고, 대학교에 들어가고 나서도 이래 저래 다시 도전하지 못하고 있었다. 아마도 대학교를 졸업할 때 쯤에 설명서가 같이 붙어있는 루빅큐브를 구매할 기회를 마주했고, 구매했지만, 여전히 설명서 마저도 내게는 너무나도 어려운 것이었다. 그 설명서를 계속 간직하다가 오늘에서야 (처음 본지 40년 지나서..) 아이가 심심하다며 만지작거리는 큐브 옆에 설명서를 찾아서 들고 가서 옆에서 설명서를 읽어서 다시 해석을 시도했고, 이번에는 풀어내고 큐브를 만들어내는 데에 성공했다.
-
첨부된 설명서 사진을 참고해 보자.
https://photos.app.goo.gl/HjQ7KvY7onwbrVk18

-

루빅 큐브의 설명은 영어로 쓰인 위키피디아에 잘 나온 편으로 보인다.
https://en.wikipedia.org/wiki/Rubik's_Cube#Relevance_and_application_of_mathematical_group_theory

-
공식 홈페이지에 나온 푸는 방법 설명....
https://eu.rubiks.com/solve-it
3x3x3 뿐만 아니라, 2x2x2 푸는 방법도 나온다.
-
-
-

2018년 12월 26일 수요일

C++ 에서 (특히 MS 의 COM 구현에서) interface 사용하는 이유와 방법에 대해서

-
_( duckduckgo:   why C++ interface class is needed )_
https://duckduckgo.com/?t=palemoonsp&q=why+C%2B%2B+interface+class+is+needed&ia=web

-
C++ 에서 구현하는 interface 기능...
https://www.tutorialspoint.com/cplusplus/cpp_interfaces.htm

-
https://duckduckgo.com/?t=palemoonsp&q=why+C%2B%2B+interface+class+is+needed&ia=web

-
일반적인 다른 OO language (C# 또는 Java, Python..)을 막론하고...
https://softwareengineering.stackexchange.com/questions/108240/why-are-interfaces-useful

-
위 글에 나온 
다른 OO 언어의 기능 용어 mixin 에 대해서 설명...
https://en.wikipedia.org/wiki/Mixin

-
C++ 과 다른 언어 Java/C# 에서의 기능 차이...
https://stackoverflow.com/questions/12854778/abstract-class-vs-interface-in-c

-
_(duck:  C++ programming mutual include problem using interface class )_

How to program to an interface/abstract class in C++? https://stackoverflow.com/questions/11950231/how-to-program-to-an-interface-abstract-class-in-c

-
-

mutual dependency between base class and derived class

_( duckduckgo search:    C++ programming mutual include problem )_
result:
1
[https://stackoverflow.com/questions/625799/resolve-build-errors-due-to-circular-dependency-amongst-classes](Link URL)

2
[https://stackoverflow.com/questions/8526819/c-header-files-including-each-other-mutually](Link URL)

3
[https://stackoverflow.com/questions/5894385/c-include-problem](Link URL)

4
http://www.cplusplus.com/forum/articles/10627/

-
5
https://stackoverflow.com/questions/53515844/removing-circular-dependencies-between-classes-in-c
내가 찾던 스타일의 문제 해결로 보인다.
interface 를 도입해서 해결하는 방식으로...

--
하지만, 최종 해결은 class 라는 key-word 를 이용해서 forward declaration 을 통해 해결하였다. 위의 연결 1, 2, 3, 4 의 내용에 의한 해결 방법이다. interface 를 도입하는 것은 내가 겪은 문제에 대해서는 지나치게 복잡하고 관련성이 부족한 방법이었다고 결론 내렸다.
-
190203 ...
Effective C++ 2판 책 (번역본 대림출판사; Effictive C++ 2편 ISBN 89-7280-425-8)에 내가 겪은 것과 유사한 사례를 다루고 있었다.
(159쪽 [항목 34] 파일간의 컴파일 의존성(dependency)을 최소화하라
(159쪽부터 170쪽 까지)
(165쪽) 에는이 첵에서 다른 부분에서는 소개 되지 않는 용어가 나온다.
[Handle/Body] class
[Envelope/Letter] class

8쪽의 감사의 글 내용에 의하면, 이 [항목 34]에 나온 용어들은
(Jim Coplien) 저자의, ( Advanced C++: Programming Styles and Idioms )에 나오는 것이며, 이와 유사한 글이 현재 인터넷에 있는데, 같은 저자의 글이며, 이 글을 (디자인 패턴) 스타일로 고쳐서 쓴 것이라고 한다.
https://sites.google.com/a/gertrudandcope.com/info/Publications/Patterns/C--Idioms
이것은 GoF 의 디자인 패턴 목록에는 나오지 않는 것이다. 아마도 다른 저자(프로그래머)의 패턴 목록 확장으로 받아들이면 될 것 같다. 하지만, 그 글 자체(Advanced C++: Programming Styles and Idioms)는 GoF의 디자인 패턴 책보다 몇 년 이전에 나온 글이다.

여기의 목록 중에서, ....
https://sites.google.com/a/gertrudandcope.com/info/Publications#fullbib

아래의 항목을 찾으면 위의 ( C++ Idioms Patterns ) 문서를 아래와 같이 찾을 수 있다.
136
James O. Coplien. C++ Idioms Patterns. In Brian Foote, Neil Harrison, and Hans Rohnert, editors, Pattern Languages of Program Design 4, chapter 10, 167-197. Addison Wesley, Reading, MA, 2000.
-
아래의 page 에서 PDF file 을 다운로드 받을 수 있게 되어 있는데,
이 문서에는 위에서 나온 용어들에 대한 설명이 있는 백서(white paper) 를 download 받을 수 있다.

https://sites.google.com/a/gertrudandcope.com/info/Publications/Patterns/WhitePaper

PDF는 아래에서 다운로드
https://docs.google.com/viewer?a=v&pid=sites&srcid=Z2VydHJ1ZGFuZGNvcGUuY29tfGluZm98Z3g6MTI4MjVhZjFmMmJmY2NmOA

TDD, CDD
https://www.infoq.com/interviews/coplien-martin-tdd#anch19279
-
-

2018년 10월 3일 수요일

kee ANYWHERE (KeePass플러그인(plugin) ) 설정 기본 저장소 변경에 대한 의문

아래는 kee anywhere 라는 KeePass plugin 모듈 프로그램(독립개발 모듈)의
기존 저장소가 버전 올림에 딸 바뀌었다는 내용의 공지이다.
왜 바뀐 것인지 모르겠다. 궁금하다.
제목 말고 둘째 줄의 ( Noteworthy: ) 이후의 내용이 그것이다.
사용자(User)의 ( Roaming AppData ) 폴더가 디폴트가 되었다는 것이다. 왜 그럴까?
기존의 사용자(User)의 ( Local AppData ) 폴더는 왜 디폴트가 아니게 되었을까?

1.5.0 (2018-09-20)

This is mainly a bug-fixing release. KeePass 2.40 or newer is required now (was 2.35).
Noteworthy: Default Storage Location for settings is now in User's Roaming AppData instead of User's Local AppData.

Fixed

  • #90 Update OnHelpMeChooseAccountStorage uri
  • #96 default folder did not create automatically
  • #103 Caching database makes KeePass non-portable
  • #113 Adjust account storage location
  • #122 Fixes syntax in donation text
  • #138 Simple Spelling Correction
  • #141 Incompatible with KeePass 2.40

Improved

  • Updated Dependencies (AWS, Box, Dropbox, Google Drive, OneDrive) 
-
-
-