출처 : 구글님

 

기초지식의 한계인가...

 

C++공부를 처음부터 다시 해야 하나...

 

죠낸 짱난다...

 

===========================================================================================================================

 

OBJ 파일을 만들 때, 템플릿 코드를 분리하게 되면, 컴파일러의 번역 단위가 분리되게 되는데, 템플릿 특성상 "사용하지 않는 코드는 인스턴스화 되지 않는다" 그래서 컴파일할 때 현재의 번역 단위에선 선언만 인스턴스화 되고, 본체는 인스턴스화되지 않아 , 링커가 동작할 될 때, 링킹 에러가 나오게 된다.

링커의 에러에서 볼수 있듯이, 해당 정의를 찾지 못한다. 찾지 못하는 이유는 해당 정의를 담고 있는 오브젝트 파일을 만들지 못해서 생길 일이다. 만들지 못하는 이유는 템플릿 코드는 사용하지 않으면 코드 인스턴스화가 일어나지 않아, 컴파일러가 코드를 생성하지 못했기 때문인데, 템플릿의 경우, "같은 컴파일 번역 단위에 놓일 경우, 알아서 인스턴스화 되고, 명시적으로 사용 했을 때, 명시적으로 지정한 것들만 인스턴스화 되고,  키워드를 통해 컴파일러에게 알렸을 때, 일반 분리 모델 처럼(?) 사용 할 수 있다."

===========================================================================================================================

 

템플릿은... 헤더에 다 정의해야 합니다.

 

템플릿 특성 상 사용할 때 실체를 만들게 되는데 링크단계 이전에는
다른 소스 파일의 내용을 활용할 수 없기 때문에
실체를 만들기 위해서 모두 헤더에 두어 헤더 파일 포함만으로
실체를 만들 정보를 모두 얻기 위해서 헤더에 정의하는 것이 아닐까 생각됩니다.

 

C++ Template 이 사실 막장 스펙이라 Export 를 구현하기가 쉽지 않을 뿐더러 거의 소스 AST 를 그대로 넣지 않으면 안되는 수준에 C++ 컴파일러간 class member function mangling 규약도 다른 판에 AST 까지 맞추는건 뭐 거의 안드로메다지요. 걍 헤더에 잘 넣으시고 쓰시는게 답입니다

 

 

 

참고 :

http://www.ikpil.com/1020

 

http://www.gpgstudy.com/forum/viewtopic.php?p=106757

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1268

 

 

Visual Studio.NET 2005의 설치 프로젝트를 이용한 인스톨 프로그램 만들기 (1)

 

최근에 강좌란에 이와 관련한 내용이 없는 것 같아, 간단한 지식이지만 올립니다.

 

설치 및 배포 프로젝트는 간단히 말해서 Install Shields나 Install Factory같이 사용자를 위한 셋업 프로그램을 만들수 있도록 제공되는 기능입니다.

 

프로그래머는 이 설치 및 배포 프로젝트를 이용해 사용자가 보다 편리하게 프로그램을 설치할 수 있도록 도움을 줄 수 있습니다.

 

그럼, 설치 및 배포 프로젝트에 대해서 보다 상세하게 알아보도록 하겠습니다.

 

아래 그림과 같이 배포를 목적으로한 어떤 프로젝트가 있다고 가정해보겠습니다.

 

 

우리는 이 프로젝트가 속한 솔루션에 설치 및 배포 프로젝트를 추가합니다.

 

 

프로젝트 추가에 성공하면, 우리는 솔루션 탐색기에 다음과 같이 설치 프로젝트가 추가된 것을 확인할 수 있습니다.

 

 

 

 

그럼 이제 이 설치 프로젝트에 우리가 배포하고자 하는 프로젝트를 추가합니다. 추가하는 방법은 다음과 같습니다.

설치 프로젝트(위에서는 Setup이란 이름의 프로젝트)를 선택한 상태에서 마우스 우클릭을 한 다음, 메뉴가 나타나면, 추가 - 프로젝트 출력을 선택합니다.

 

 

 

 다음과 같은 항목이 나타나면, 우리는 우리가 추가하고자 하는 프로젝트를 선택하고, 확인을 누릅니다.

 

창이 닫히고 나면, 설치 프로젝트 아래, 발견된 종속성에는 Microsoft.NET Framework이란 항목이 추가가 되어 있고, 프로젝트 아래에는 HelloWorld의 기본 출력(활성)이란 항목이 새로이 추가된 것을 확인할 수 있습니다.

 

 이 때, 발견된 종속성에는 만약 배포하고자 하는 프로젝트에 .NET Framework에서 제공하는 참조(DLL 등) 이외에 추가적인 참조가 존재한다면, 자동적으로 포함이 됩니다. 하지만, 가끔 추가가 되지 않는 경우도 있는데, 이 때는 직접적으로 추가를 해야합니다.

 

 

 

 

 그럼 이제 속성 창을 살펴보도록 하겠습니다. 속성창의 항목들은 기본적으로 속성 이름을 통해 그 역할을 직관적으로 이해할 수 있습니다.

 

 이 속성들 중에서 매우 중요한 2가지 항목을 꼽자면, 바로 RemovePreviousVersionVersion이 아닐까 싶습니다.

 

 RemovePreviousVersion은 새로운 배포 버전을 설치할 때, 이전 버전의 프로그램을 제거하고 설치할 것인지를 설정하는 속성입니다. 이 때, 버전은 프로그램의 버전이 아닌, 셋업 프로그램의 버전을 보고 판단합니다.

 

 따라서, 이전 셋업 프로그램의 Version이 1.0.0이었다면, 새로 배포할 때는 이 버전을 업그레이드 해줘야 합니다.

 

Version 항목의 값을 수정하면, 다음과 같은 창이 나타나는데, "예"를 선택합니다.

 

 

 

만약, "예"를 선택하지 않은 경우, 이전 버전을 제거하지 못하는 경우가 발생합니다.

 

 

 

 그럼 이제, 파일 시스템 항목에 대해서 살펴보겠습니다.

일 시스템 항목은 우리가 배포하고자 하는 항목을을 사용자 시스템의 어느 곳에 위치시킬 것인지를 결정하는 속성이라 이해하면 됩니다.

 

 예를 들어, 프로그램의 실행 파일은 응용 프로그램 폴더에 두고, 실행 파일의 바로 가기는 사용자 바탕화면에, 그리고, 도움말 등은 사용자 프로그램 메뉴에 추가한다는 식으로 말입니다.

 

 설치 프로젝트에 우리가 배포하고자하는 프로젝트를 추가하면, 디폴트 값으로 응용 프로그램 폴더에 실행 파일이 추가됩니다.

 

 만약, 우리가 이 실행 파일의 바로가기를 바탕화면에 추가하고 싶다면?

그림에서 HelloWorld의 기본 출력(활성)에서 마우스 우클릭을 한 다음, 바로 가기 추가를 선택하여 바로 가기를 만듭니다. 그리고 이 바로가기를 드래그 & 드롭을 이용해 사용자 바탕화면으로 이동시키면 됩니다.

 

 이 때, 주의해야할 사항은 기본적으로 바로가기의 이름은 HelloWorld의 기본 출력(활성)의 바로가기란 다소 어색한 이름으로 만들어집니다. 만약, 이 상태로 설치 프로그램을 만들어, 설치하면 바탕화면에 이 어색한 이름 그대로 만들어지게 되는 것이죠.

 그러므로 HelloWorld같이 바로가기의 이름을 수정하여 배포하는 것이 덜 어색하겠죠..^^.

 

 아, 그리고 한가지 더.. 기본적으로 바로가기의 속성창에 보면 Icon 속성에 '없음'이라고 되어있습니다.

이 상태로 배포하면 당연 바탕화면의 바로 가기는 아무런 아이콘이 없는.. (엄밀히 말하면 도스 창 형태의 아이콘을..) 상태로 사용자 바탕화면에 추가되게 됩니다. 그다지 보기 좋지 않겠죠..^^

 

 여기까지 하셨다면, 가장 기본적인 인스톨 프로그램을 완성하실 수 있게된 것입니다.

 

하지만, 아직 부족한 점이 몇 몇 보입니다. 예를 들어, 고객의 정보를 입력 받는 창을 만들고 싶다던지, 프로그램이 설치되고 나면, 라이센스(EULA)에 관한 텍스트 파일을 보여준다던지, 회사의 홈페이지가 나타나게 하고 싶은데 말입니다.

 

이와 같은 내용은 다음 강좌에서 설명할 수 있도록 하겠습니다. 아울러, 이 설치 프로젝트를 보다 커스터마이징할 수 있는 Installer 클래스에 대해서도 알아보도록 하겠습니다.

 

 장문의 글 읽어주셔서 감사합니다.

 

덧글에 있어 수정할 내용이나 추가할 내용 있으면 가감없이 말씀해주세요.

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

출처 : 데브피아

http://www.devpia.com/Forum/BoardView.aspx?no=563082&ref=563082&forumname=VC_QA&stype=&KeyW=%be%b2%b7%b9%b5%e5%bf%cd+%b5%f0%b9%f6%b0%c5%b0%a1+%b0%fc%b7%c3%b5%c8+OS+%c0%fc%c3%bc%b0%a1+%b8%d8%c3%df%b4%c2+%c7%f6%bb%f3&KeyR=titlecontent


>> 쓰레드와 디버거가 관련된 OS 전체가 멈추는 현상


아주 이상한 현상에 시달리는 중입니다.

이번뿐만 아니고 아주 오래전부터 이 현상을 겪고 있는데요

 

쓰레드를 사용하는 프로그램을 디버깅 하다보면

VC++ 를 포함해서 모든 응용 프로그램, 하다못해 OS자체까지

멈추는 현상이 발생합니다.

 

그러니까, DEBUG 모드로 컴파일 한 후에

여기저기 브레이크 포인트 잡고 F5 누르면

좀 실행되다가 OS가 멈춰버립니다.

꼭 이 상황에서만 멈춥니다. 딴 상황도 아니고..

릴리즈로 컴파일 해서 돌린다던지,

디버그로 컴파일해서 F5 안하고 그냥 실행하면 또 전혀 문제가 안나타납니다.

 

아주 멈추는 것이 아니고, 거의 수백배 가량 늦게 작동합니다.

작업관리자 열어서 프로세스 죽이는것도 잘 안돼고 (죽이는 명령 내리는데 까지 10분은 걸려요)

 

문제는 이 현상이 항상 나타는게 아니고 '종종' 나타납니다.

 

제가 만드는 프로그램이 항상

쓰레드가 2~3개가 동시에 돌아갑니다.

각 쓰레드는 idle 이 거의 없이 팽팽하게 돌아가죠.

그렇다고 쓰레드 우선순위를 조정하거나 한 적은 없습니다.

데드락은 더욱더 없구요.

 

제가 만들고 있는 프로그램이 특이한 경우라고 볼수 없습니다.

왜냐하면 완전히 다른 스타일의 프로그램을 만들때도(물론 쓰레드 사용)

같은 현상을 겪고 있거든요.

제가 만든 프로그램에 원인이 없다고 정말 "확신" 합니다.

저도 쓰레드쪽 프로그래밍은 할만큼 한사람이거든요..

 

윈도우XP프로, VC++2005 를 사용 중입니다만,

VC++2003 에서도 마찬가지였습니다.

그리고 이 컴퓨터에서만 이러는게 아니고

완전히 다른 기종의 컴퓨터에서도 마찬가집니다.

OS도 다시 밀어보고 했는데도 마찬가지구요

 

VC++2003 의 버그라고 결론을 내렸었는데, 얼마전부터 사용하시 시작한

VC++2005 에서도 같은 문제가 생기니 미쳐 버리겠네요.

 

제발 이 문제를 해결법을 알려주시는분은 제가 진짜

만나서 사례라도 하고싶군요



===============================================================================================

그거 IME 쪽 버그입니다. 오피스 설치하면 더 그런데, ctfmon이 IME랑 엮이면서 문제를

일으키는 걸로 알고 있습니다.(MS KB 문서가 나온 적이 있습니다.)

 

여튼간에 해결방법은 제어판에 가셔서 국가 및 언어 옵션을 여세요

그리고 언어탭 쪽 설정에서 텍스트 서비스 및 입력 언어라고 있습니다.

여기서 고급 텍스트 서비스라는 언급이 있을텐데 이걸 사용안한다고 설정하세요.

 

그리면 될 겁니다. 부팅은 꼭 안해도 되는데, 기존에 뜬 놈들은

한글 입력이 안될 겁니다. 프로그램 죽였다 다시 띄워도 될텐데..귀찮으니

부팅해주는 것도 좋을 듯 하군요.

 

뭐 저는 이런 식으로 해결해서 잘 쓰고 있습니다.

한번 사용해보세요.



안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

http://support.microsoft.com/kb/601085/ko#top

 

 

"셀 서식이 너무 많습니다."라는 오류가 발생하면서 파일이 열리지 않는다

기술 자료 ID : 601085
마지막 검토 : 2004년 9월 21일 화요일
수정 : 1.0
이 문서는 이전에 다음 ID로 출판되었음: KR601085

요약

한글 엑셀에서 파일을 열 때
"셀 서식이 너무 많습니다."
라는 메시지가 발생하면서 파일이 열리지 않는 경우가 있습니다. 혹은 파일은 열리더라도 작업을 할 때 마다 계속 "더 이상 사용자 정의 셀 서식을 추가할 수 없습니다" 라는 메시지가 발생하면서 작업을 더 이상 진행할 수 없는 경우도 있습니다. 이런 현상은 대부분 바이러스에 의해 발생하며, 현재는 바이러스를 모두 치료한 상태라고 하더라도 이전에 감염된 적이 있는 경우라면 바이러스의 영향으로 이런 현상들이 여전히 발생할 수 있습니다.

원인

1. 엑셀의 Workbook은 약 4,000개의 서로 다른 셀 서식 조합을 가질 수 있습니다.
(셀 서식 조합이라는 것은 글꼴 서식(예- 글꼴 종류, 크기, 기울임, 굵은 글꼴, 밑줄 등)이나 괘선(괘선의 위치, 색상 등), 무늬나 음영, 표시 형식, 맞춤, 셀 보호 등을 포함합니다.)
이 셀 서식이 엑셀의 한계를 벗어나는 경우 엑셀에서는
"셀 서식이 너무 많습니다."
오류를 발생시킵니다. 4,000개의 셀 서식은 엑셀에서 일반적으로 사용하기에 아주 충분한 숫자이지만, 매크로 바이러스들이 대부분 엑셀 파일에 [셀 서식]과 [유형]을 자동적으로 추가하는데, 이런 파일들에서 셀 서식이 엑셀의 한계를 벗어 나기란 아주 쉬운 일입니다.
2. 특별한 셀 서식 조합이 없는데도 "셀 서식이 너무 많습니다." 라는 오류가 발생할 수도 있습니다. 이 경우는 대부분 파일을 열어서 [서식] ? [유형] 메뉴에서 유형 이름을 확인해 보면 [Laroux]나 [Pldt] 등을 포함한 유형 이름이 포함되어 있는 경우가 대부분입니다.
3. 그리고 Laroux나 Pldt 등의 바이러스를 치료한 상태라고 하더라도 백신은 바이러스에 의해 추가된 [유형]이나 [셀 서식]은 삭제하지 않으므로, 현재는 바이러스를 치료 했다고 하더라도 엑셀이 파일을 정상적인 상태로 열 수 없는 상태에서 "셀 서식이 너무 많습니다." 라는 오류를 발생시키면서 파일을 열지 못할 수도 있습니다.

해결 방법

"셀 서식이 너무 많습니다."
메시지가 발생하는 문제의 해결 방법은 다음의 두 가지가 있습니다. (물론, 아래의 해결 방법을 사용하기 전에 반드시 최신 버전의 상용 백신을 사용하여 바이러스 치료를 먼저 할 것을 권장합니다.)
1.
"셀 서식이 너무 많습니다."
오류가 발생하면서 파일이 열리는 경우:
Microsoft 기술 자료의 다음 문서를 참조하십시오.
600945 (http://support.microsoft.com/kb/600945/KO/) "더 이상 사용자 정의 셀 서식을 추가할 수 없습니다." 오류
2.
"셀 서식이 너무 많습니다."
오류가 발생하면서 파일이 열리지 않는 경우:
Microsoft 기술 자료의 다음 문서를 참조하십시오.
214253 (http://support.microsoft.com/kb/214253/KO/) XL2000: 손상된 엑셀 파일 복구하는 방법
그리고 이런 문제가 더 이상 발생하지 않도록 예방하는 최선의 방법은 V3 Pro98이나 InocuLan, 노턴 등의 상용 백신을 항상 최신 버전으로 업그레이드하여 사용하도록 하고, 백신의 시스템 감시 창 (혹은 RealTime Manager)을 활성화 시켜 놓고 사용하는 것이 좋습니다.



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹 (http://support.microsoft.com/newsgroups/default.aspx)에 참여하시기 바랍니다.

본 문서의 정보는 다음의 제품에 적용됩니다.
Microsoft Excel 97 Standard Edition
Microsoft Excel 2000 Standard Edition
키워드: 
kbtshoot KB601085
안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,