Lyn
조회 수 29758 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Trac, Mantis, Redmine 은 기본적으로 UTF-8을 사용한다.

그러나 VC++은 소스를 ascii로 저장하기 때문에 저장소 연동을 하면 소스에서 한글이 다 박살난 채로 보이게 된다.

이것을 해결하기위해서는 소스를 UTF-8로 저장 해야 되는데, 저장시 자동으로 UTF-8로 변환을 하는 매크로가 있다



MacroIDE -> EnviromentEvents에


Imports System.IO


추가 한다. 그 아래에


Sub MakeUTF8File(ByVal path As String)

    Dim input As New FileStream(path, FileMode.Open)


    'Check BOM

    Dim isUTF8 As Boolean = (input.ReadByte = &HEF And input.ReadByte = &HBB And input.ReadByte = &HBF)

    input.Close()


    If (Not isUTF8) Then

        Dim s As String

        s = File.ReadAllText(path, System.Text.Encoding.Default)

        File.WriteAllText(path, s, System.Text.Encoding.UTF8)

    End If

End Sub


Public Sub DocumentEvents_DocumentSaved(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved

    Dim path As String = Document.FullName

    MakeUTF8File(path)

End Sub


를 추가한다.



PS. trac은 지금 안 쓰고있어 확인이 안되는데 redmine 은 그냥 소스 인코딩을 추가해주면 간단히 해결된다 (...) 걍 euc-kr 등록해두자



?

Lyn
조회 수 28730 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

뭐 달라진건 별로 없지만 아마 속도는 좀 빨라졋을거에요 (...)


그동안 왜 뻘짓을 후 ...

?

Lyn
조회 수 28273 추천 수 0 댓글 3
Atachment
첨부 '8'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

C++11 표준이 완성 되면서 상당히 많은 기능이 표준 라이브러리에 추가 되었습니다.

이들중 상당수는 완전히 새로운 클래스로 제공되는 것이 많지만 기존 기능을 보안하는 식으로 추가된것도 많습니다.

그중 가장 많이 쓰인다고 볼 수 있는 string 관련으로도 여러가지가 추가 되었습니다.


아래 코드는 최신의 Visual Studio 2012 에서 작성되었습니다.


첫번째로 Native언어 답게 메모리를 직접 관리 할 수 있는 함수가 추가 되었습니다.


1.png


원래 대부분의 stl 객체가 그렇든 한번 할당 한 메모리는 데이터 사이즈가 줄어든다 해도 줄이지 않았습니다.
하지만 C++11에서는 shrink_to_fit 매소드를 제공하여 메모리를 줄일 수 있도록 하고 있습니다.



2.png


그 다음으론 front, back, pop_back 함수의 추가입니다.
이름답게 front, back 은 각각 첫글자, 마지막 글자를 리턴하며 pop_back은 맨뒤에서 한글자를 잘라냅니다.



사실 이 다음부터가 가장 쓸만한 부분입니다.
C++의 string 은 숫자 관련 함수를 제공하지 않아 C의 atoi, itoa 처럼 배열을 기반으로 하는 함수를 사용하거나 stringstream 을 사용하여 문자열을 조립하는 과정을 필요로 하였습니다. C++11에서는 그것과 관련된 함수를 추가 하였습니다.


3.png


가장 기본적인 활용법입니다 stoi 함수는 문자열을 숫자로 변환합니다. type 에 따라 stoi, stol, stoll, stoul, stoull, stof, stod, stold로 바꿔쓸 수 있습니다.
각각 int, long, long long, unsigned long, unsigned long long, float, double, long double 로 변환하는 함수입니다.


4.png

뒤에 변환할 수 없는 문자열이 있을경우, 변환 가능한 부분 까지만 변환 후 몇글자가 변환되었는지 얻어올 수 있습니다.


5.png

진법 변환도 가능합니다.
16진수 100은 256으로 8진수 100은 64로 정상적으로 변환 되었습니다.

16진수 8진수만이 아니라 7진수 9진수 등 중간단계에 있는 진법으로도 정상적으로 변환이 가능합니다.


6.png


문자열을 언제나 숫자로 바꿀 수 있는것은 아니기 때문에 2 종류의 예외를 던질 가능성이 있습니다.
각각 숫자로 변환 불가능한 문자열과 너무 길어서 숫자의 범위를 넘어서는 문자열을 변환 시도 할 경우의 예외입니다.


7.png

기본적으로 0x를 앞에 붙일경우 0만 인식하여 0으로 변환 되지만 16진법으로 변화할 경우에 한정해서 0x를 인식하여 정상적인 문자열로 판단합니다.
8진법 변환의 경우 앞의 0 한자리만 인식하여 0으로 변환된것을 볼 수 있습니다.



지금까진 문자열을 숫자로 변환 하였지만 반대의 기능도 있습니다.


8.png


반대의 기능으로 to_string 함수를 제공합니다.
모든 정수/실수 타입에 대해 오버로딩 되어 있기때문에 단순히 호출만 하면 됩니다.


단 실수의 경우 무조건 소수점 7번째 자리에서 반올림하여 6자리로 표기하게 되어 있습니다.
자리수 조절이 필요 할 경우 format 기능이 있는 boost:format, stringstream, sprintf 등의 기존 함수를 사용하여야 합니다

?
  • ?
    노땅개발자 2012.09.25 01:15
    정리 참 잘해주셨네요.
    제 블로그에 출처 명시하고 퍼갑니다. ^^
  • ?
    최고의프로그래머 2012.09.26 01:35
    좋은 글 감사합니다. 출처명시하에 스크랩합니다
  • ?
    노력왕 2013.09.17 04:21
    와우 좋은 정보 입니다.
    제 블로그에도 퍼갈게요 좋은 하루 되세요 ^^

Lyn
조회 수 28249 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
VS2010에서 코드를 치려고 하면 아래와 같은 팝업이 뜨면서 툴이 제대로 동작 하지 않는 경우가 있다.
(주로 빨간줄 잘못긋기, 인텔리센스 맛가기 등등 ...)

Visual Studio has encountered an exception.PNG

Visual Studio has encountered an exception. This may be caused by an extension. You can get more information by running the application together with the /log parameter on the command line, and then examining the file 'C:\Users\USERNAME\AppData\Roaming\Microsoft\VisualStudio\10.0\ActivityLog.xml'

이경우 레지스트리 수정으로 해결이 가능 한데, 

32Bit의 경우
[HKEY_CLASSES_ROOT\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32]
의 Default 값을 
"C:\Program Files\Common Files\Microsoft Shared\MSEnv\TextMgrP.dll" 으로


64Bit의 경우
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32]
의 Default 값을 
"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\TextMgrP.dll" 으로 수정한다.


만약 기본폴더가 아닌 다른 곳에 설치 했다면 적당히 값 조절해라.
?
  • ?
    챙고 2013.11.13 18:26
    안녕하세요, 25살 이제 막 opencv에 들어선 대학생입니다.
    이 오류때문에 3일동안 아무것도 진전이 안되더군요.
    이 방법을 사용해 보려고하는데 제가 초보중에 초보여서..
    default 값을 변경해주는 방법을 모르겠습니다 ㅠ
    혹시 그 부분을 조금만 더 알려주실수 있나요?
    답변 기다리겠습니다.

Lyn
조회 수 28144 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

멀티미디어 타이머를 시작하기 위해 timeSetEvent 를 호출하면



1.png

2.png


결과적으로 timeBeginPeriod 가 호출된다.

멀티미디어 타이머 해상도의 비밀은 timeBeginPeriod 이었던것!

?

2012.01.01 07:14

새해다 ...

Lyn
조회 수 28105 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

뭐 업다 18 ㅜㅜ

?

Lyn
조회 수 27902 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Cilk plus 자료와 Sample Code

?

Lyn
조회 수 27618 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Devpia에 자꾸 질문이 올라와서 정리 해 둔다 ...


1. 32bit 프로그램에서는 64bit DLL을 사용할 수 없다. 반대도 마찬가지


2. 32bit 프로그램에서는 64bit ActiveX를 사용할 수 없다. 역시 반대도 마찬가지.


3. 64bit OS에서 32bit 프로그램이 Windows\System32에 접근하면 Windows\SysWOW64로 리다이렉트 된다. 


4. 32bit 프로그램에서는 64bit 프로세스의 정보를 얻어올 수 없다.


5. 64bit OS에서는 32bit 로 된 ShellExtension 을 띄울 수 없다. 단 32bit 프로그램이 ShellAPI로 ShellExtension 을 띄우려면 32bit용 ShellExtinsion 이 설치되어 있어야 한다(간단히 말해서 32/64 둘다만들란 소리다!)


6. ODBC는 32bit 와 64bit를 따로 등록해야 한다(64bit 의 제어판에 있는건 64bit 용 ODBC다. 32bit용은 SysWOW64에 가서 실행해야 한다)

한쪽만 등록할 경우 bit가 다르면 안보인다.


7. 윈도우 서비스는 공통이다. 신경 안써도 됨

?
  • ?
    ssonacy 2012.07.21 01:01

    64bit  프로세스는 32bit DLL 를 로드 할수 없다구요 ?

    흠 ...??

  • profile
    Lyn 2012.07.21 21:30

    네 없습니당


Lyn
조회 수 27452 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

C++ 코딩을 하다 보면 복사 되지 말아야 하는 객체가 참 많다...


특히 포인터를 소유하고 있는 객체들이 그런데, Copy Constructor 를 만들어 주면 간단한 일이지만...  일일히 하기도 난감하고 Mutex 객체 등은 Copy Constructor 조차 의미가 없고 레퍼런스 카운팅을 해야 되는 더러운 상황이 된다.


이럴땐 간단히 Copy Constructor 를 private에 선언해서 차단 할 수 있는데... 이걸 일일히 해주자니 또 귀찮은게 인지상정이라...


이런것을 간단히 해결해 주는 class가 있다


boost::noncopyable 인데


boost/utility.hpp 에 존재한다.


간단히 boost::noncopyable 를 private 상속(상속시 접근지정자를 쓰지 않으면 private 다!) 해주면 된다.

너무 간단 하므로 샘플따위 없다 (...) 딴데가서 알아봐라

?

Lyn
조회 수 27234 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#include <windows.h>
#include <cstdio>
#include <cstdlib>

bool isThreadWaiting(HANDLE ThreadHandle)
{
	bool Result = false;

	SuspendThread(ThreadHandle);
	CONTEXT ThreadContext;
	ThreadContext.ContextFlags = CONTEXT_CONTROL;
	BOOL a = GetThreadContext(ThreadHandle, &ThreadContext);
	INT_PTR* StackPointer = reinterpret_cast<INT_PTR*>(ThreadContext.Esp);

	HMODULE DLLHandle = LoadLibraryA("Ntdll.dll");
	INT_PTR WaitFunctionPtr = reinterpret_cast<INT_PTR>(GetProcAddress(DLLHandle, "NtWaitForSingleObject")); 
	//WaitForSingleObject의 종착점이 되는 함수가 NtWaitForSingleObject
	
	if ((*StackPointer >= WaitFunctionPtr) && (*StackPointer <= WaitFunctionPtr + 50))
	{
		//대충 +50을 해 주는 이유는 실제 복귀주소로 저장된 곳이 NtWaitForSingleObject의 시작주소가 아니라 조금 실행된 뒤이기 때문
		Result = true;		
	}

	FreeLibrary(DLLHandle);
	ResumeThread(ThreadHandle);

	return Result;
}

DWORD PASCAL ThreadFun1(PVOID Param)
{
	WaitForSingleObject(HANDLE(Param), INFINITE);

	return 0;
}

DWORD PASCAL ThreadFun2(PVOID Param)
{
	while(true)
	{
		Sleep(100000);
	}

	return 0;
}
void main()
{	
	HANDLE Event = CreateEvent(nullptr, TRUE, FALSE, nullptr);

	HANDLE Thread1 = CreateThread(nullptr, 0, &ThreadFun1, reinterpret_cast<LPDWORD>(Event), 0, nullptr);
	HANDLE Thread2 = CreateThread(nullptr, 0, &ThreadFun2, nullptr, 0, nullptr);

	Sleep(1000); //Thread 돌 시간좀 주고 ...

	printf("Is Thread1 Waiting? %s\n", isThreadWaiting(Thread1) ? "Yes" : "No");
	printf("Is Thread2 Waiting? %s\n", isThreadWaiting(Thread2) ? "Yes" : "No");

	system("pause");
}


sc1.png


Wait계열 함수가 몇종류 더 있는데 그것도 그냥 각자 처리해 주면 간단...


?

2012.08.17 10:36

[윈도8] 윈도8 구경1

Lyn
조회 수 26527 추천 수 0 댓글 1
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

얼마전 MSDN 에 정식으로 올라온 윈도8 입니다.
Enterprise 버전은 라이센스가 없어서 Pro로 설치 했네요


Untitled.png


슬슬 제대로 둘러봐야 겠지만 첫인상 아주 좋습니다.
빠릿빠릿해요 그냥


아직 호환성이 걱정되는 놈들이 있어 Win7하고 듀얼부팅을 세팅 해 뒀는데... OS 선택 메뉴가 아주 화려하네요.


dual boot.png

?
  • ?
    사무엘 2012.09.12 03:22
    윈8.. 윈도우 XP 이래로 트렌드이던 둥근 모서리가 없어지고,
    제목이 창 제목의 왼쪽이 아니라 가운데에 찍히는 디자인이 윈도우 3.x 이래로 다시 부활했고,
    그러데이션이 그냥 단색(solid color)로 바뀌는 등..
    모바일을 의식해서 그런지 디자인이 좀 더 검소해지고 단순해졌지요. 단순히 변화만을 위한 변화인 것도 느껴지더군요.

    일부 너무 급격한 변화는 왜 이런 걸 만들었는지 의문이 드는 것도 있습니다.
    참, MS 오피스는 2007 이래로 진작부터 제목이 가운데에 찍히는 스타일로 회귀했지요. ^^

Lyn
조회 수 25880 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
void foo1(string str = "DefaultString")
{
//값으로넘기기
}
 
void foo2(const string str = "DefaultString")
{
//const 값으로넘기기
}
 
void foo3(string& str = "DefaultString")
{
//이건 에러남...
}
 
void foo4(const string& str = "DefaultString")
{
//const 레퍼런스로 넘기기
}
 
void foo5(string& name = string("DefaultString"))
{
//임시객체 넘기기
}
 
void foo6(const string& name = string("DefaultString"))
{
//const 임시객체 넘기기
}
 
static std::string DEFAULT_STRING = "DefaultString";
void foo7(string& str = DEFAULT_STRING)
{
//이건 DEFAULT_STRING이 바뀔 가능성이 있음.. 위험한코드
}
 
const static std::string CONST_DEFAULT_STRING = "DefaultString";
void foo8(const string& str = CONST_DEFAULT_STRING)
{
//static const 레퍼런스 객체 넘기기 (boost가 자주 쓴 방식... string은 아니지만)
}
?

Lyn
조회 수 25831 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

두번째 방법으로는 CRT의 예외 핸들러에서 UnhandledExceptionFilter로 데이터를 넘겨서 생성하는 방법인데요...
이는 안정적이고 정석적이지만 치명적인 단점으로 CRT에서 던지는 예외가 하나가 아니라는겁니다... 


어쨋든 코드를 보면


#include <Windows.h>
#include <DbgHelp.h>
#include <cstdio>
#include <string>

using namespace std;

#pragma comment(lib, "dbghelp.lib")

LONG __stdcall TopLvFilter(PEXCEPTION_POINTERS pExceptionPointer)
{
	MINIDUMP_EXCEPTION_INFORMATION MinidumpExceptionInformation;
	std::wstring DumpFileName = L"dmpfile.dmp";

	MinidumpExceptionInformation.ThreadId = ::GetCurrentThreadId();
	MinidumpExceptionInformation.ExceptionPointers = pExceptionPointer;
	MinidumpExceptionInformation.ClientPointers = FALSE;

	if (DumpFileName.empty() == true)
	{
		::TerminateProcess(::GetCurrentProcess(), 0);
	}

	HANDLE hDumpFile = ::CreateFile(DumpFileName.c_str(),
		GENERIC_WRITE,
		FILE_SHARE_WRITE,
		nullptr,
		CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL, nullptr);

	MiniDumpWriteDump(GetCurrentProcess(),
		GetCurrentProcessId(),
		hDumpFile,
		MiniDumpNormal,
		&MinidumpExceptionInformation,
		nullptr,
		nullptr);

	::TerminateProcess(::GetCurrentProcess(), 0);

	return 0;
}
void InvalidParameterHandler(const wchar_t* expression, const wchar_t* function, const wchar_t* file, unsigned int line, uintptr_t pReserved)
{
	EXCEPTION_POINTERS ExceptionPointer;
	EXCEPTION_RECORD ExceptionRecord;
	_CONTEXT ContextRecord;

	ZeroMemory(&ContextRecord, sizeof(ContextRecord));
	RtlCaptureContext(&ContextRecord);

	ZeroMemory(&ExceptionRecord, sizeof(EXCEPTION_RECORD));
	ExceptionRecord.ExceptionCode = STATUS_INVALID_CRUNTIME_PARAMETER;	
	ExceptionRecord.ExceptionAddress = (PVOID)ContextRecord.Eip;
		
	ExceptionPointer.ExceptionRecord = &ExceptionRecord;
	ExceptionPointer.ContextRecord = &ContextRecord;

	TopLvFilter(&ExceptionPointer);
}
void main()
{
	SetUnhandledExceptionFilter(TopLvFilter);
	_set_invalid_parameter_handler(InvalidParameterHandler);
	atoi(nullptr);	 
}



구조는 간단합니다. RtlCaptureContext 를 이용해서 현재 쓰래드의 Context를 캡쳐 해 오고, 익셉션 코드와 현재 코드가 실행중인 위치를 넘겨 주면 되는데요..
x86 시스템에서 현재 실행중인 위치는 Eip 레지스터에 있기 때문에 캡쳐해온 Context에서 Eip를 
ExceptionAddress로 넘겨 주면 됩니다.


이 방식은 안정적이고 백신이 오진을 할 가능성도 없고 Windows 8 에서도 아무 문제 없이 작동 하지만 ... 위에서 말한것처럼 예외가 이거 하나가 아니라는게 문제가 됩니다.
예를들어 메모리 할당 예외는 _set_invalid_parameter_handler 로 처리 할 수 없습니다. 하지만 어차피 몇개 안되기도 하고 (...) 그냥 몇개 더 만들어주면 될 문제지요.


정말 골때려 지는건 3rd party 에서 SetUnhandledExceptionFilter 를 호출해서 자기껄로 만들어버리는 라이브러리가 있다는겁니다 =_=; 적은 내안에만 있는게 아닌거죠...그래서 첫번째 방법과 두번째 방법을 모두 적용해 두는게 좋다고 생각 합니다


TAG •
?

Lyn
조회 수 25251 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

VC++ 2013 컴파일러는 기본적으로 XP를 지원하지 않으며, 궂이 필요한 경우에 한해 XP 지원 툴셋을 쓸 수 있습니다.


아래처럼 플랫품 툴셋을 v120_xp 로 바꾸면 됩니다


asd.png



?

Lyn
조회 수 25157 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. v8 빌드


2. 사용법



?

Lyn
조회 수 25058 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

DLLMain은 WinMain 이나 main 과는 다르게 제약이 많다.

나도 이걸로 크래시 낸 적이 많이몇번 있고 ... 


DLLMain은 일종의 "객체의생성자" 라고 보면 비슷하다.

"로딩중" 인 것이지 로딩이 끝난것이 아니다 라는것이다.


아래에는 Attach 시 기준으로 적었지만, Detach 에도 별 다를건 없다. kerner32.dll 이외의 dll은 이미 언로딩 되어있을 수도 있다.


이제 하지 말아야할것을 슬~슬 나열 해 보자. 


1. kernel32.dll 이외의 dll에 있는 함수 대부분.

kernel32.dll 이외의 dll이 로딩되어 있다는 보장은 전혀없다


2. 동기화코드

락, 언락 등의 코드


3. LoadLibrary, CreateProcess

다른 DLL 쓰지말라는말과 일맥상통. 


4. 전역객체 초기화, 메모리할당 등

메모리메니저가 로딩되었다는 보장이 없다


5. COM관련 코드

역시 보장없다


6. 예외 throw

C++ 객체 생성자에서 throw 하는것과 비슷한 대략므흣한 (...) 상황이 발생한다.


결론. 

DLLMain은 걍 비워 둬라. 그리고 Initialize 함수를 제공해라.
상당수의 라이브러리가 라이브러리 초기화 함수를 제공하는것은 다 이유가 있다!

(당장 GDI+와 Winsock2를 생각해봐라!) 

?

Lyn
조회 수 24671 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
<작성중>
소스는 첨부파일에. 
#include <cstdio>
#include <windows.h>
#include "Coroutine.h"
 
class NumberCount : public Coroutine<int>
{
protected:
	void Execute() override
	{
		for (int i = 0; i < 100; ++i)
		{			
			yield_return(i);
		}
	}
};
 
class NumberPrint : public Coroutine<void>
{
protected:
	void Execute() override
	{
		for (int i = 0; i < 100; ++i)
		{		
			printf("NumberPrint : %d\n", i);
			yield;
		}
	}
};
 
void wmain()
{	
	ConvertThreadToFiber((LPVOID)GetCurrentThreadId());
	
	NumberCount Co1;
	NumberPrint Co2;
 
	for (int i = 0; i < 100; ++i)
	{
		printf("NumberCount : %d\n", Co1.Resume());
		Co2.Resume();
		Sleep(1000);
	}	
}
 

?

2012.02.20 07:45

[작성중] 알려진 포트

Lyn
조회 수 24643 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

TCP


21 : Ftp

22 : SSH

80 : Http

443 : Https

3389 : RDP (Windows 원격 데스크탑)


?

Lyn
조회 수 23850 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

전 직접 빌드해서 써서 별로 쓴일이 없긴 했는데..

문닫는거 보니 가슴이 좀 아프네요


boostpro.png

TAG •
?

Lyn
조회 수 23468 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
http://www.microsoft.com/ko-KR/download/details.aspx?id=38188
 

사실 온라인 다운로드 버전 받을 때 스크롤 쭉 내려서 읽어 보면 나와 있는데 ...
온라인 업데이트 프로그램을 받은 후 VS2012.2.exe /layout 처럼 /layout 옵션을 주어 시작하면 설치하지 않고 다운로드만 받습니다.

다운로드 후 인터넷이 안되는 PC로 복사해 가서 설치 하면 됩니다.
용량이 한 2G쯤 되니 시간은 좀 걸립니다(본격 원본보다 더 큰 패치)

?
  • ?
    아리수 2013.04.15 13:51
    VS2012 설치 하면서 미리 업데이트를 받아 두려고 했더니 설치 중이라는 메시지와 함께 실행이 되지 않더군요...꼼꼼하더군요..ㅋㅋ..
    작업하시는데 참고하세요...^^

Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
/ 8