https://support.microsoft.com/ko-kr/kb/130869


Microsoft Visual C++에서 컴파일러는 버전이 특정 버전 보다 오래 된 경우 GUID 초기화 해야 정확히 한 번만. 따라서 두 개의 서로 다른 버전 DEFINE_GUID 매크로 있습니다. 버전에는 단지 기호 이름에 대 한 외부 참조를 선언합니다. 다른 버전은 실제로 기호 이름을 GUID의 값을 초기화합니다. GUID의 기호 이름에 대 한 LNK2001 오류가 나타나면, GUID 초기화 되지 않았습니다.

참고 DEFINE_GUID 매크로 guiddef.h 헤더 파일에는 GUID를 선언합니다. 또한 GUID를 정의 하려면 해당 INITGUID 포함 됩니다. H 헤더 파일에 원본 파일의 GUID를 정의 해야 합니다.

사용자 GUID 두 가지 방법 중 하나로 초기화 해야 수 있습니다.

  • 미리 컴파일된 헤더 파일을 사용 하는 경우에 INITGUID 포함 됩니다. H 헤더 파일에서 초기화 되어야 합니다 구현 파일 GUID를 정의 하기 전에. (MFC 응용 프로그램 마법사에서 생성 된 프로젝트.cpp 파일을 기본적으로 사용 됩니다.)
  • 미리 컴파일된 헤더를 사용 하지 않는 경우에 OBJBASE를 포함 하기 전에 INITGUID 정의 합니다. H. (OBJBASE. H는 OLE2가 포함 되어 있습니다. H.)
참고 미리 컴파일된 헤더를 사용할 때 컴파일러의 버전이 특정 버전 보다 최신 경우는 INITGUID 포함할 수 있습니다. H 헤더 파일에 여러 헤더 파일을 포함 하는 단일 헤더 파일에 있습니다. 이 인해 GUID이 헤더 파일에 포함 되어 있는 모든 소스 파일에 정의 됩니다. 기호 정의 여러 번 해도 LNK2001 오류가 발생 하지 나타납니다. 즉, DECLSPEC_SELECTANY 키워드는 DEFINE_GUID 매크로에 사용 됩니다. 이 키워드 하면 링커가이 여러 정의 제대로 처리 됩니다.
자세한 내용

컴파일러는 버전이 특정 버전 보다 오래 된 경우

OBJBASE에 나타나는 DEFINE_GUID의 정의 다음과 같습니다. H:

      #ifndef INITGUID
      #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, \ 
                                b4, b5, b6, b7, b8)
          EXTERN_C const GUID FAR name
      #else

      #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, \ 
                                b4, b5, b6, b7, b8)
         EXTERN_C const GUID name \ 
            = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
      #endif // INITGUID
				
참고 INITGUID 기호가 정의 되어 있지 않으면 DEFINE_GUID 간단 하 게 정의 하는 외부 참조 이름입니다.

INITGUID. 찾기 (특히) H:

      #undef DEFINE_GUID

      // Other code . . .

      #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, \ 
                                b4, b5, b6, b7, b8)
         EXTERN_C const GUID __based(__segname("_CODE")) name \ 
                  = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
				
INITGUID 넣어서. OBJBASE 이후에 H입니다. H, DEFINE_GUID는 실제로 GUID를 초기화 하도록 수정 됩니다.

참고: 것이 이렇게 단 한 번만 각 DLL 또는 EXE 있는지 확인 해야 합니다. 두 개의 서로 다른 소스 파일에 있는 GUID 초기화 하 고 다음 함께 연결 하려는 경우이 오류가 발생 합니다.
LNK2005 < 기호 > 이미 정의 되었습니다.

컴파일러는 버전이 특정 버전 보다 최신 버전인 경우

OBJBASE에서 DEFINE_GUID의 정의 그대로 표시 됩니다. H는 다음과 같습니다.
#ifdef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
        EXTERN_C const GUID DECLSPEC_SELECTANY name \
                = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
    EXTERN_C const GUID FAR name
#endif // INITGUID
Guiddef.h DECLSPEC_SELECTANY 키워드의 정의 다음과 같습니다.
#ifndef DECLSPEC_SELECTANY
#if (_MSC_VER >= 1100)
#define DECLSPEC_SELECTANY  __declspec(selectany)
#else
#define DECLSPEC_SELECTANY
#endif
#endif
참고 DECLSPEC_SELECTANY 키워드는 OBJBASE에서 사용 됩니다. H에서 참조 되지 않은 개체의 초기화 코드는 무시 됩니다. 따라서 컴파일러는 버전이 특정 버전 보다 새로운 오류가 발생 하지 않습니다.


'MFC > Error' 카테고리의 다른 글

OLE/COM Object Viewer - DllRegisterServer in IVIEWERS.DLL failed  (0) 2016.04.18
Debug Assertion Failed in occont.cpp Line 926  (0) 2015.11.20
C2143  (0) 2015.06.24
C2504  (0) 2015.05.27
LNK 4070  (0) 2014.09.11
Posted by 곰돌이짱
,

https://support.microsoft.com/ko-kr/kb/176938




regsvr32  "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\IViewers.Dll"

'MFC > Error' 카테고리의 다른 글

외부 확인 되지 않은 LNK2001" DEFINE_GUID를 사용하여 하는 방법  (0) 2016.06.29
Debug Assertion Failed in occont.cpp Line 926  (0) 2015.11.20
C2143  (0) 2015.06.24
C2504  (0) 2015.05.27
LNK 4070  (0) 2014.09.11
Posted by 곰돌이짱
,

Debug Assertion Failed in occont.cpp Line 926

https://support.microsoft.com/en-us/kb/949107


Action
Development or migration of an MFC application with ActiveX controls in Visual Studio 2005 SP1.
Result
You may get the following error message:
---------------------------





Cause
This problem can occur when the ActiveX controls are not properly registered on the deployment machine.
Resolution
Register ActiveX controls using regsvr32.exe.



'MFC > Error' 카테고리의 다른 글

외부 확인 되지 않은 LNK2001" DEFINE_GUID를 사용하여 하는 방법  (0) 2016.06.29
OLE/COM Object Viewer - DllRegisterServer in IVIEWERS.DLL failed  (0) 2016.04.18
C2143  (0) 2015.06.24
C2504  (0) 2015.05.27
LNK 4070  (0) 2014.09.11
Posted by 곰돌이짱
,

C2143

MFC/Error 2015. 6. 24. 11:46

https://msdn.microsoft.com/ko-kr/library/0afb82ta.aspx


C 프로그램에서는 함수의 시작 부분에 변수를 선언해야 하며, 함수가 비선언 명령을 실행한 후에는 변수를 선언할 수 없습니다.

C++
// C2143j.c
int main() 
{
    int i = 0;
    i++;
    int j = 0; // C2143
}



구문 오류 : 'token1'이(가) 'token2' 앞에 없습니다.

컴파일러가 기대한 특정 토큰(공백이 아닌 언어 요소)과는 다른 토큰이 발견되었습니다.

함수 시도 블록을 사용할 경우 발생할 수 있는 이 오류에 대한 내용은 기술 자료 문서 Knowledge Base article 241706을 참조하십시오.

C++ 언어 참조를 검사하여 코드 구문이 잘못된 부분을 확인합니다. 컴파일러는 문제를 발생시킨 줄을 발견한 이후에 이 오류를 보고할 수도 있으므로 오류 줄보다 앞에 있는 여러 코드 줄을 검사하십시오.

C2143 오류는 서로 다른 상황에서 발생할 수 있습니다.

운영자 이름을 정규화 할 수 있는 경우에 발생할 수 있습니다 (::, -> , 및 . ) 키워드 다음에 야 template , 같이 있습니다.

C++
class MyClass
{
    template<class Ty, typename PropTy>
    struct PutFuncType : public Ty::PutFuncType<Ty, PropTy> // error C2143
    {
    };
};

기본적으로 c + +는 Ty::PutFuncType 쓸것이라고 가정합니다. 따라서 다음 < 으로 해석-보다 작다. 알려야 컴파일러는 명시적으로 PutFuncType 는 꺾쇠 괄호 올바르게 구문 분석할 수 있도록 서식 파일입니다. 이 오류를 해결 하려면 사용 하는 template 종속 형식 이름을 다음과 같이 키워드입니다.

C++
class MyClass
{
    template<class Ty, typename PropTy>
    struct PutFuncType : public Ty::template PutFuncType<Ty, PropTy> // correct
    {
    };
};

C2143는 /clr을 사용할 때 using 지시문에 구문 오류가 있을 수 있습니다.

C++
// C2143a.cpp
// compile with: /clr /c
using namespace System.Reflection;   // C2143
using namespace System::Reflection;

/clr을 사용하지 않고 CLR 구문을 사용하여 소스 코드 파일을 컴파일할 때 일어날 수도 있습니다.

C++
// C2143b.cpp
ref struct A {   // C2143 error compile with /clr
   void Test() {}
};

int main() {
   A a;
   a.Test();
}

if 문 다음에 오는 첫 번째 비공백 문자는 왼쪽 괄호여야 합니다. 컴파일러는 그 외의 어떠한 것도 변환할 수 없습니다.

C++
// C2143c.cpp
int main() {
   int j = 0;

   // OK
   if (j < 25)
      ;

   if (j < 25)   // C2143
}

C2143오류가 발견된 줄이나 오류가 있는 줄의 바로 윗줄 중 하나에 닫는 중괄호, 괄호 또는 세미콜론이 없습니다.

// C2143d.cpp
// compile with: /c
class X {
   int member1;
   int member2   // C2143
} x;

또는 클래스 선언에 잘못 된 태그가 없는 경우:

C++
// C2143e.cpp
class X {
   int member;
} x;

class + {};   // C2143 + is an invalid tag name
class ValidName {};   // OK

레이블이 문에 첨부되지 않았습니다. 예를 들어 복합 문 끝에 레이블을 단독으로 배치해야 하는 경우에는 이 레이블을 null 문에 첨부하십시오.

C++
// C2143f.cpp
// compile with: /c
void func1() {
   // OK
   end1:
      ;

   end2:   // C2143
}

표준 c + + 라이브러리의 형식에는 조건이 지정 되지 않은 호출이 수행 될 때 오류가 발생할 수 있습니다.

C++
// C2143g.cpp
// compile with: /EHsc /c
#include <vector>
static vector<char> bad;   // C2143
static std::vector<char> good;   // OK

누락 된 또는 typename 키워드가 있습니다.

C++
// C2143h.cpp
template <typename T>
struct X {
   struct Y {
      int i;
   };
   Y memFunc();
};
template <typename T>
X<T>::Y X<T>::memFunc() {   // C2143
// try the following line instead
// typename X<T>::Y X<T>::memFunc() {
   return Y();
}

명시적 인스턴스화를 정의하려고 했습니다.

C++
// C2143i.cpp
// compile with: /EHsc /c
// template definition
template <class T>
void PrintType(T i, T j) {}

template void PrintType(float i, float j){}   // C2143
template void PrintType(float i, float j);   // OK

C 프로그램에서는 함수의 시작 부분에 변수를 선언해야 하며, 함수가 비선언 명령을 실행한 후에는 변수를 선언할 수 없습니다.

C++
// C2143j.c
int main() 
{
    int i = 0;
    i++;
    int j = 0; // C2143
}


'MFC > Error' 카테고리의 다른 글

OLE/COM Object Viewer - DllRegisterServer in IVIEWERS.DLL failed  (0) 2016.04.18
Debug Assertion Failed in occont.cpp Line 926  (0) 2015.11.20
C2504  (0) 2015.05.27
LNK 4070  (0) 2014.09.11
MSDN C/C++ 빌드오류  (0) 2014.09.11
Posted by 곰돌이짱
,

C2504

MFC/Error 2015. 5. 27. 15:58


// Parent.h

class CChild;


class CParent

{


};


// Child.h

#include "Parent.h"


class CChild : publc CParent

{


};




'MFC > Error' 카테고리의 다른 글

Debug Assertion Failed in occont.cpp Line 926  (0) 2015.11.20
C2143  (0) 2015.06.24
LNK 4070  (0) 2014.09.11
MSDN C/C++ 빌드오류  (0) 2014.09.11
LNK1257 오류  (0) 2014.06.05
Posted by 곰돌이짱
,

LNK 4070

MFC/Error 2014. 9. 11. 11:40

1. ProjectName.def => ProjectNameX.def (복사)

2. LIBRARY      "Project"  =>  LIBRARY      "ProjectNmameX" 변경

LNK 4070

/OUT: .EXP의 filename 지시문이 'filename' 출력 파일 이름과 다릅니다. 지시문이 무시됩니다.
/OUT:filename directive in .EXP differs from output filename 'filename'; ignoring directive

.exp 파일을 만들 때 NAME 또는 LIBRARY 문에 지정한 filename이 기본적으로 선택되었거나 /OUT 옵션으로 지정한 출력 filename과 다릅니다.


개발 환경에서 출력 파일의 이름을 변경했는데 프로젝트의 def 파일이 업데이트되지 않은 경우 이 경고가 발생합니다. 이 경고를 해결하려면 .def 파일을 수동으로 업데이트하십시오.


결과로 생성된 DLL을 사용하는 클라이언트 프로그램에 문제가 발생할 수 있습니다.




'MFC > Error' 카테고리의 다른 글

C2143  (0) 2015.06.24
C2504  (0) 2015.05.27
MSDN C/C++ 빌드오류  (0) 2014.09.11
LNK1257 오류  (0) 2014.06.05
LNK 2005 libcmt.lib 에러  (0) 2013.12.18
Posted by 곰돌이짱
,

MSDN C/C++ 빌드오류

MFC/Error 2014. 9. 11. 11:37

C/C++ 빌드오류       

http://msdn.microsoft.com/ko-kr/library/8x5x43k7%28v=vs.90%29.aspx





'MFC > Error' 카테고리의 다른 글

C2504  (0) 2015.05.27
LNK 4070  (0) 2014.09.11
LNK1257 오류  (0) 2014.06.05
LNK 2005 libcmt.lib 에러  (0) 2013.12.18
GetlastError 998  (0) 2013.10.31
Posted by 곰돌이짱
,

LNK1257 오류

MFC/Error 2014. 6. 5. 14:34

1. 전체 프로그램 최적화 (아니요)

 

2. 추가 모듈(DLL/LIB) 현재 PC에서 재컴파일 후 프로젝트에 포함

'MFC > Error' 카테고리의 다른 글

LNK 4070  (0) 2014.09.11
MSDN C/C++ 빌드오류  (0) 2014.09.11
LNK 2005 libcmt.lib 에러  (0) 2013.12.18
GetlastError 998  (0) 2013.10.31
C1189  (0) 2013.08.20
Posted by 곰돌이짱
,

* 외부 모듈과 실행 모듈의 런타임라이브러리 불일치시 발생.


[구성속성 - C/C++ - 코드생성 - 런타임 라이브러리]에서

외부모듈과 실행 모듈을 일치시킴


* Debug 모드와 Release 모드 빌드시 출력 파일명을 다르게 지정


* 실행 모듈 헤더에 다르게 선언.


#ifdef _DEBUG
    #pragma comment(lib, "DebugMod.DLL")
#else
    #pragma comment(lib, "ReleaseMod.DLL")
#endif



[구성속성 - 링커 - 입력 - 특정 기본 라이브러리 무시]에서

해당 라이브러리 추가.


http://msdn.microsoft.com/ko-kr/library/6wtdswk0%28v=VS.100%29.aspx


다음 표는 사용할 런타임 라이브러리에 따라 무시해야 하는 라이브러리를 보여 줍니다.

사용할 런타임 라이브러리

무시해야 하는 라이브러리

단일 스레드(libc.lib)

libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

다중 스레드(libcmt.lib)

libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

DLL을 사용하는 다중 스레드(msvcrt.lib)

libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

디버그 단일 스레드(libcd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib

디버그 다중 스레드(libcmtd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib

DLL을 사용하는 디버그 다중 스레드(msvcrtd.lib)

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

예를 들어, 이 경고가 발생한 경우와 비디버그, 단일 스레드 버전의 런타임 라이브러리를 사용하는 실행 파일을 만들려는 경우에는 링커에 다음 옵션을 사용하면 됩니다.






'MFC > Error' 카테고리의 다른 글

LNK 4070  (0) 2014.09.11
MSDN C/C++ 빌드오류  (0) 2014.09.11
LNK1257 오류  (0) 2014.06.05
GetlastError 998  (0) 2013.10.31
C1189  (0) 2013.08.20
Posted by 곰돌이짱
,

GetlastError 998

MFC/Error 2013. 10. 31. 13:57

998: 잘못된 메모리 위치를 액세스하려고 했습니다


MFC DLL 오류 시 DLL 프로젝트에서 Stack Overlfow 등을 찾아본다.

'MFC > Error' 카테고리의 다른 글

LNK 4070  (0) 2014.09.11
MSDN C/C++ 빌드오류  (0) 2014.09.11
LNK1257 오류  (0) 2014.06.05
LNK 2005 libcmt.lib 에러  (0) 2013.12.18
C1189  (0) 2013.08.20
Posted by 곰돌이짱
,