C++2013. 3. 20. 14:51

VS 2005와 VS2008이 설치되어 있는 PC에서 2005로 빌드한 소스를 2008로 빌드하려고 컴파일 했더니 아래와 같은 오류가 발생하였다.

 - C1083 포함파일을 열 수 없습니다. 'glaux.h'


해당파일을 찾아보니 C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl 에 해당 파일이 있어서 아래와 같이 조치 하였다.

 - 해당 프로젝트의 속성 -> C/C++ -> 일반 클릭

 - 추가 포함 디렉터리 에 C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl 추가.


하지만 똑같은 에러가 발생하여 구글링을 하던 중 방법을 찾았다. 단 이 방법은 VS 2005에 PlatformSDK가 설치되어 있는 경우에 가능하다. 아예 PlatformSDK가 설치가 안되어 있는 경우에는 우선 설치 후 확인해 봐야 함.

 - 우선 VS 2008에서는 glaux.h 파일이 없다. 

 - VS 2005에 있는 glaux.h파일과 glaux.lib파일을 VS 2008 설치폴더에도 같은 위치에 복사해 준다.

  -> VS 2005 파일 위치: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK

  -> VS 2008 복사할 위치: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC

 - 각각 파일을 복사한다.

  -> VS 2005 파일 위치\Include의 gl폴더를 VS 2008 복사할 위치\Include 폴더에 복사.

  -> VS 2005 파일 위치\Lib\GlAux.lib => VS 2008 복사할 위치\Lib 폴더에 복사.

  -> VS 2005 파일 위치\Lib\AMD64\GlAux.Lib => VS 2008 복사할 위치\AMD64 폴더에 복사.

  -> VS 2005 파일 위치\Lib\IA64\GlAux.Lib => VS 2008 복사할 위치\IA64폴더에 복사.


위와 같이 조치 후 컴파일하니 VS 2008으로 정상적인 컴파일이 가능해졌다.

Posted by 쿵캉켕
C++2012. 3. 6. 12:51
fopen의 파일 열기 옵션은 좀처럼 제대로 외우기가 쉽지 않다. 또한 모든 옵션별 차이점을 제대로 파악하기도 쉽지 않고... 일단 파악된 만큼 정리해 놓고... 추후 더 발견된 사항이 있으면 지속적으로 update해 나가는게 좋을 듯..

"r" : 읽기 전용 모드. 파일이 없으면 NULL return.
"w" :쓰기 전용 모드. 파일이 없으면 생성되고 있으면 내용이 없어진다.
"a" : append모드. 파일이 없으면 생성. 이미 존재하는 파일 끝부분에 file pointer가 위치하게 되며 이 위치부터 뒷쪽으로만 write가능. 읽기는 불가능. fseek등으로 이 부분보다 앞으로 file pointer를 이동시키면 어떻게 될까 ? 아래 내용으로 봐서는 fseek등으로 file pointer를 이동하여도 이와 상관없이 파일 끝부분에 write가 되는 것으로 생각됨.

Opening a file in append mode (a in the mode) causes all subsequent writes to the file to be forced to the current end-of-file, regardless of previous calls to the fseek() function.

"r+" : 읽고 쓰기 모드, 파일이 없으면 NULL return.
"w+" : 읽고 쓰기 모드 단, 파일이 없으면 만들고 있으면 기존 내용을 지움. write를 먼저 한 후 동일 파일 포인터로 읽기 수행이 필요한 경우 사용. 보통은 읽기 전용, 혹은 쓰기 전용으로 fopen하므로 w+가 필요한 일은 별로 없을 듯.
"a+" : append모드, 읽고 쓰기 가능. 파일이 이미 존재할 경우 그 파일의 끝부분에서부터 추가된 내용을 쓴다. 읽기는 fseek로 지정한 file pointer위치에서 가능하나 쓰기는 파일 끝부분에서만 가능.

출처:  
http://dooeui.blogspot.com/2008/10/fopen.html
Posted by 쿵캉켕
C++2011. 3. 11. 14:32
#. 기본 아스키 코드 표

#. 확장 아스키 코드 표


출처 : 네이년 이미지
Posted by 쿵캉켕
C++2010. 7. 21. 18:25

#. 에러 메시지.
  System.BadImageFormatException이(가) 처리되지 않았습니다. Message="파일이나 어셈블리 'D2net.Common, Version=1.4.4.29, Culture=neutral, PublicKeyToken=null' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다."

  Source="IngestTestApp"

  FileName="D2net.Common, Version=1.4.4.29, Culture=neutral, PublicKeyToken=null"

  FusionLog="=== 미리 바인딩된 상태 정보 ===\r\n로그: 사용자 = IRONTOOTH\\irontooth\r\n로그: DisplayName = D2net.Common, Version=1.4.4.29, Culture=neutral, PublicKeyToken=null\n (Fully-specified)\r\n로그: Appbase = file:///E:/D2NET/DevApp_irontooth/IngestTestApp/IngestTestApp/bin/Debug/\r\n로그: 초기 PrivatePath = NULL\r\n호출 어셈블리: IngestTestApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.\r\n===\r\n로그: 이 바인딩은 default 로드 컨텍스트에서 시작됩니다.\r\n로그: 응용 프로그램 구성 파일이 없습니다.\r\n로그: C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\config\\machine.config에서 컴퓨터 구성 파일을 사용합니다.\r\n로그: 참조에 정책이 지금 적용되지 않습니다(전용, 사용자 지정, 부분, 위치 기반 어셈블리 바인딩).\r\n로그: 새 URL file:///E:/D2NET/DevApp_irontooth/IngestTestApp/IngestTestApp/bin/Debug/D2net.Common.DLL을(를) 다운로드합니다.\r\n오류: 어셈블리 설치를 완료하지 못했습니다(hr = 0x8007000b). 검색이 종료됩니다.\r\n"

  StackTrace:

       위치: IngestTestApp.IngestTestAppForm.ProcessProc()

       위치: System.Threading.ThreadHelper.ThreadStart_Context(Object state)

       위치: System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

       위치: System.Threading.ThreadHelper.ThreadStart()

#. 원인.
  위와 같은 에러가 발생하여 이너넷 서핑을 한 결과 개발 환경의 플랫폼 설정을 managed C++과 C#이 동일해야 한다는 것을 알게 되었다.

#. 조치.
1. [구성 관리자]를 클릭한다.


2. 아래처럼 다른 플랫폼을 동일한 플랫폼으로 맞춰 준다.


Posted by 쿵캉켕
C++2010. 7. 21. 15:24

#. 선언
 - #include <atlconv.h>


#. Casting 사용 전 선언.
USES_CONVERSION;


#. 각 형변환에 대한 매크로
A2BSTR

LPSTR -> BSTR

A2COLE
    
LPSTR -> LPCOLESTR

A2CT
         
LPSTR -> LPCTSTR

A2CW
   
LPSTR -> LPCWSTR

A2OLE
   
LPSTR -> LPOLESTR

A2T
   
LPSTR -> LPTSTR

A2W
   
LPSTR -> LPWSTR

OLE2A
   
LPOLESTR -> LPSTR

OLE2BSTR
 
LPOLESTR -> BSTR

OLE2CA
   
LPOLESTR -> LPCSTR

OLE2CT
   
LPOLESTR -> LPCTSTR

OLE2CW
  
LPOLESTR -> LPCWSTR

OLE2T
   
LPOLESTR -> LPTSTR

OLE2W
   
LPOLESTR -> LPWSTR

T2A
   
LPTSTR -> LPSTR

T2BSTR
   
LPTSTR -> BSTR

T2CA
   
LPTSTR -> LPCSTR

T2COLE
   
LPTSTR -> LPCOLESTR

T2CW
   
LPTSTR -> LPCWSTR

T2OLE
   
LPTSTR -> LPOLESTR

T2W
   
LPTSTR -> LPWSTR

W2A   
LPWSTR -> LPSTR

W2BSTR  
LPWSTR -> BSTR

W2CA   
LPWSTR -> LPCSTR

W2COLE  
LPWSTR -> LPCOLESTR

W2CT   
LPWSTR -> LPCTSTR

W2OLE   
LPWSTR -> LPOLESTR

W2T
   
LPWSTR -> LPTSTR

#. ex
.h 파일
#include <atlconv.h> 추가.

.cpp 파일
HRESULT MediaMovement::SetClip()
{
  LPCOLESTR lpcolestrFile;
  LPSTR lpstrFile = "aaaaaaaaaaaa";
   HRESULT hr;
 
  //문자열 변환을 사용하기 위한 선언.
  USES_CONVERSION;

   lpcolestrFile= A2COLE(lpstrFile); //LPSTR을 LPCOLESTR로 변환하기 위해 A2COLE 사용.

  return hr;
 }

Posted by 쿵캉켕
C++2010. 6. 15. 14:58

#. 내용.
 - 메모리 반환을 사용종료 시점에서 자동으로 Release()해 줍니다. 단 ID**스타일로 사용해야 합니다.

#. 방법.
 - 헤드파일에 atlbase.h를 반드시 포함 시킨 후 사용.
 - CComPtr<IDirect3DTexture9> g_pTexture = NULL; 형태로 선언 후 사용.
 - 종료시점에서 자동으로 Release()를 해주기 때문에 따로 해제 시키지 않아도 됨.

#. 일반적인 사용과 차이점.
 - 일반적인 텍스처 사용.
  -> LPDIRECT3DTEXTURE9 g_pTexture = NULL; 형태로 선언 후 사용.
  -> 종료 시점에 g_pTexture->Release()를 호출하여 메모리 반환.

 - CComPtr 사용.
  -> CComPtr<IDirect3DTexture9> g_pTexture = NULL; 형태로 선언 후 사용.
  -> 종료시점에서 자동으로 Release()를 해주기 때문에 따로 해제 시키지 않아도 됨.

Posted by 쿵캉켕