온갖 삽질을 다 하다가 알아낸 해결책~
소스 :
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=99693
문제의 발단.
global/static변수를 생성/초기화 하는 코드가 프로그램 시작과 동시에 불려야 하는데 CLR프로젝트에선 그 코드가 안불린다.
프로그램 빌드는 되나 실행을 하면 프로그램의 entry point로 진입하기 전에 _crtvalidheap 어쩌고 저쩌고 하는 assert에 부딪힌다.
해결법.
1. 포인터로 만들고 CLR어플리케이션에서 동적으로 생성한다.. MyClass::Init()같은 함수를 호출하여... -_- (근데 static pointer는 생성을 안해도 괜찮은거야?)
장점 : 간단하다.
단점 : 전역 오브젝트를 모두 클라이언트에서 생성하는건 x삽질임이 분명하다.
2. 함수 내부로 static을 옮긴다.
ex)
class X()
{
static int a;
int GetA() { return a; }
}
를
class X()
{
int GetA() { static a; return a;}
}
이렇게 하면 실제 생성하는 시점이 처음으로 GetA가 호출된 시점이 되기 때문인지 문제가 발생하지 않는다.
장점 : 역시 간단하다. 그리고 완벽한 실행이 된다.
단점 : 모든곳에 적용할 수 없다.. 싱글턴용 static 정도에나 쓸만할듯?
3. 링커 옵션에서 entry point를 지우고 서브시스템 설정(콘솔, 윈도우, etc) 역시 없앤다.
장점 : 코드 수정이 필요 없는 완벽한 솔루션
단점 : 무조건 콘솔창이 하나 백그라운드에 뜬다. 정말로 치명적인 단점 -_-
4. 링커 옵션에서 시작점을 ?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z 로 바꾼다.
장점 : 코드 수정이 필요 없는 완벽한 솔루션
단점 : 이게 대체 왜 문제를 해결해 주는지 당최 이해를 못하겠... -_-;;;;
와 뭔가 있어보이는 포스팅을 드디어 했다~
....
오 이런 oTL
소스 :
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=99693
문제의 발단.
global/static변수를 생성/초기화 하는 코드가 프로그램 시작과 동시에 불려야 하는데 CLR프로젝트에선 그 코드가 안불린다.
프로그램 빌드는 되나 실행을 하면 프로그램의 entry point로 진입하기 전에 _crtvalidheap 어쩌고 저쩌고 하는 assert에 부딪힌다.
해결법.
1. 포인터로 만들고 CLR어플리케이션에서 동적으로 생성한다.. MyClass::Init()같은 함수를 호출하여... -_- (근데 static pointer는 생성을 안해도 괜찮은거야?)
장점 : 간단하다.
단점 : 전역 오브젝트를 모두 클라이언트에서 생성하는건 x삽질임이 분명하다.
2. 함수 내부로 static을 옮긴다.
ex)
class X()
{
static int a;
int GetA() { return a; }
}
를
class X()
{
int GetA() { static a; return a;}
}
이렇게 하면 실제 생성하는 시점이 처음으로 GetA가 호출된 시점이 되기 때문인지 문제가 발생하지 않는다.
장점 : 역시 간단하다. 그리고 완벽한 실행이 된다.
단점 : 모든곳에 적용할 수 없다.. 싱글턴용 static 정도에나 쓸만할듯?
3. 링커 옵션에서 entry point를 지우고 서브시스템 설정(콘솔, 윈도우, etc) 역시 없앤다.
장점 : 코드 수정이 필요 없는 완벽한 솔루션
단점 : 무조건 콘솔창이 하나 백그라운드에 뜬다. 정말로 치명적인 단점 -_-
4. 링커 옵션에서 시작점을 ?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z 로 바꾼다.
장점 : 코드 수정이 필요 없는 완벽한 솔루션
단점 : 이게 대체 왜 문제를 해결해 주는지 당최 이해를 못하겠... -_-;;;;
와 뭔가 있어보이는 포스팅을 드디어 했다~
....
오 이런 oTL

댓글을 달아 주세요
.........무슨 뜻인지 알 수가 없다!
오웃 @.@