• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

'Programming'에 해당되는 글 147건

  • 2016.06.09 파이썬에서 사전을 사용해 보자 ( key, value )
  • 2016.06.08 파이썬에서 리스트를 사용 하자.
  • 2016.06.03 파이썬 문자열 개행문자 제거하기 3
  • 2016.06.03 파이썬에서 문자열을 이용하자
  • 2016.06.03 파이썬에서 변수를 이용하기. 자료형이 없어도 가능! (Variable)
  • 2016.06.03 파이썬의 기본 수식 연산자
  • 2016.06.02 파이썬에서 한글을 처리하기 위한 방법
  • 2016.05.17 class를 포함한 dll 만들기 ( 클래스 동적 라이브러리 ) 1
  • 2016.05.17 visual studio 프로젝트 및 솔루션 이름을 변경하기.
  • 2016.03.09 HTTP 프로토콜을 이용하여 웹상의 파일을 다운로드 하자.
  • 2015.12.17 폴더 내의 파일목록을 다뤄보자. 폴더 내 파일 리스트 만들기
  • 2015.12.09 [Function] 폴더 내 파일 탐색
  • 2015.11.11 jpeg 파일 디코딩하기. 1
  • 2015.05.27 Picture Control에 영상 출력하기.
  • 2015.05.27 CWnd <- -> HWND
  • 2015.04.21 성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점
  • 2015.03.16 Kinect v2 를 이용하여 Depth 영상을 사용하자. (키넥트2)
  • 2015.03.16 Kinect v2 를 이용하여 RGB 영상을 사용하자. (키넥트2) 3
  • 2015.03.06 [VS2013] error MSB8031 - 멀티바이트문자집합 에러를 해결하자.
  • 2014.12.01 Dialog에 Drag&Drop 기능을 적용하자.

파이썬에서 사전을 사용해 보자 ( key, value )

Programming/Python 2016. 6. 9. 13:16




파이썬에는 사전이라는 개념이 있다.


이는 key와 value로 구성되어 있고 key 는 list에서의 index와 같은 역할을 한다.

다만 key에는 순서가 입력순이 아니기 때문에 음수index를 이용하는 등의 방법은 불가하다.


print 해보면 key 값으로 정렬되어 출력되긴 하지만 이것은 보여주는 방법일 뿐, key의 순서를 의미함은 아니다.


기본적인 사용방법 정리.


# Dictionary    key : value
dDict = {'이름':'사용자', "나이":29, '성별':"남"}

# index는 사용 불가능, key 로 접근
dDict[0] # error
dDict['이름'] # "사용자"

# key로 값 불러오고 수정 가능
dDict['이름'] = "홍길동" # {'이름':'홍길동', "나이":29, '성별':"남"}

# del 함수를 이용하여 항목 삭제
del dDict["성별"] # {'이름':'홍길동', "나이":29}

# 사전 내 항목 확인 items
dDict.items() # dict_items([('이름','홍길동'), ("나이",29)])

# 사전 내 key list 추출
dDict.keys() # dict_keys(['이름', '나이'])

# 사전 내 value list 추출
dDict.values() # dict_values(['홍길동', 29])

# key 값으로 value 불러오기 대괄호 이용한 것과 동일
dDict.get("이름") # "홍길동"

# key 의 존재여부 확인
# 2.X 버전에서는 has_key 로, 3버전 이후에서는 in 함수를 이용
# 2.X
dDict.has_key("이름") # True
dDict.has_key('성별') # False
# 3.X
'성별' in dDict # False

# 사전에 항목 추가
dDict['성별'] = "남" # {'이름':'홍길동', "나이":29, '성별':"남"}

# 사전 초기화
dDict.clear() # {}


저작자표시 비영리 (새창열림)

'Programming > Python' 카테고리의 다른 글

파이썬에서 코드 들여쓰기 정리를 자동으로 하자.  (4) 2016.06.15
파이썬에서 조건문을 이용하자.  (0) 2016.06.13
파이썬에서 리스트를 사용 하자.  (0) 2016.06.08
파이썬 문자열 개행문자 제거하기  (3) 2016.06.03
파이썬에서 문자열을 이용하자  (0) 2016.06.03
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

파이썬에서 리스트를 사용 하자.

Programming/Python 2016. 6. 8. 11:54




기본적으로 리스트의 사용법은 c의 것과 크게 차이가 없다.


다만 리스트 내에 자료형이 고정적이지 않기 때문에 아무 데이터나 넣을 수 있다는점


리스트에서 주로 사용하는 기능들 정리 해 보자.



# list에는 자료형 관계없이 삽입 가능
lList = [1, 2, 3.14, 'a', "abc"]

# index로 내용 확인 가능하며 음수는 끝에서부터 카운팅
print lList[2] # 3.14
print lList[-1] # "abc"

# 리스트에 요소 추가하기, 하나의 요소씩 추가 가능
lList.append(4) # [1, 2, 3.14, 'a', "abc", 4]

# 리스트의 지정 위치에 요소 삽입하기
lList.insert(2, "second") # [1, 2, "second", 3.14, 'a', "abc", 4]

# 리스트에 요소들 추가하기, 여러 요소 추가 가능
lList.extend([2, 1]) # [1, 2, "second", 3.14, 'a', "abc", 4, 2, 1]

# 요소의 위치 확인
lList.index(3.14) # index(요소, 탐색시작index, 탐색종료index)

# 요소 개수 확인
lList.count(3.14) # 리스트 내 해당 요소가 몇개 있는지 확인

# 요소를 꺼내기, 꺼낸 요소가 반환되며 파라미터는 index, 기본은 맨 끝.
lList.pop(1) # [1, "second", 3.14, 'a', "abc", 4, 2, 1]

# 요소를 제거하기, 파라미터는 제거 할 요소, 기본은 맨 처음
lList.remove('a') # [1, "second", 3.14, "abc", 4, 2, 1]

# 리스트 정렬하기, 기본은 오름차순, reverse=True 옵션으로 내림차순
lList.sort() # [1, 1, 2, 3.14, 4, 'abc', 'second']

# 리스트 순서 반전하기
lList.reverse()
print lList # ['second', 'abc', 4, 3.14, 2, 1, 1]


저작자표시 비영리 (새창열림)

'Programming > Python' 카테고리의 다른 글

파이썬에서 조건문을 이용하자.  (0) 2016.06.13
파이썬에서 사전을 사용해 보자 ( key, value )  (0) 2016.06.09
파이썬 문자열 개행문자 제거하기  (3) 2016.06.03
파이썬에서 문자열을 이용하자  (0) 2016.06.03
파이썬에서 변수를 이용하기. 자료형이 없어도 가능! (Variable)  (0) 2016.06.03
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

파이썬 문자열 개행문자 제거하기

Programming/Python 2016. 6. 3. 14:04




파일 입출력을 하다보면 라인 단위로 읽어오는 경우에는 끝에 개행문자 \n 이 포함되어 있다


문자열만을 출력하기 위해서는 개행문자를 제거 해 줄 필요가 있다.



print 문에서 개행문자 제거


3버전 대에는 파라미터로 end='' 를 추가 해주면 맨 뒤에 위치한 개행문자를 제거 해 준다.


동일한 역할을 2버전 대에서는 끝에 콤마를 찍어 주는 방식으로 수행한다.

sStr = "Test abcd qwerty\n"

# Python 2 버전
print (sStr),

# Python 3 버전
print (sStr, end='')




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


170705 추가


rstrip 함수를 사용하면 개행문자를 쉽게 제거할 수 있다.


sStr = "Test abcd qwerty\n"

sStr.rstrip('\n') // "Test abcd qwerty"


저작자표시 비영리 (새창열림)

'Programming > Python' 카테고리의 다른 글

파이썬에서 사전을 사용해 보자 ( key, value )  (0) 2016.06.09
파이썬에서 리스트를 사용 하자.  (0) 2016.06.08
파이썬에서 문자열을 이용하자  (0) 2016.06.03
파이썬에서 변수를 이용하기. 자료형이 없어도 가능! (Variable)  (0) 2016.06.03
파이썬의 기본 수식 연산자  (0) 2016.06.03
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

파이썬에서 문자열을 이용하자

Programming/Python 2016. 6. 3. 13:18




주로 파일 입출력을 하거나 결과물을 출력할때 문자열을 많이 사용하게 된다.


파이썬에서는 문자열을 작은 따옴표('문자열' )나 큰따옴표("문자열")을 이용하여 표시한다

둘 다 동일한 문자열로 인식하는 듯 하니 편한걸로 이용하면 되겠다.


MFC에서 사용하던 CString.format 이나 printf / sprintf 등에서 사용하던 문자열 포멧부터


문자열 분리하는 방법까지 간단한 사용법 정리.


# printf 와 같이 포멧 이용 문자열
sFormat = "%s의 가격은 %d원 입니다\n" % ("사과", 2000)
print sFormat

# 중괄호를 이용한 포멧이용
# .format을 이용하면 파라미터 처럼 이용 가능
sBracket = "{} {}".format('첫번째항목', 2)
print sBracket

# 중괄호 안에 숫자를 이용하면 format 안의 숫자번째 파라미터 이용
sBracket2 = "{0} {0} {2} {1}".format("첫번째항목", "두번째항목", "세번째항목")
print sBracket2

str = " ABCDEFG hijklm "

# 문자열 위치 찾기 find
print str.find("CDE")

# 좌우 공백 제거를 위한 strip / lstrip / rstrip
print str.strip()

# 문자열을 분리하는 split
sSplit = str.split(" ")
print sSplit


저작자표시 비영리 (새창열림)

'Programming > Python' 카테고리의 다른 글

파이썬에서 리스트를 사용 하자.  (0) 2016.06.08
파이썬 문자열 개행문자 제거하기  (3) 2016.06.03
파이썬에서 변수를 이용하기. 자료형이 없어도 가능! (Variable)  (0) 2016.06.03
파이썬의 기본 수식 연산자  (0) 2016.06.03
파이썬에서 한글을 처리하기 위한 방법  (0) 2016.06.02
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

파이썬에서 변수를 이용하기. 자료형이 없어도 가능! (Variable)

Programming/Python 2016. 6. 3. 11:30




코딩을 하다보면 필수적으로 사용하게 되는 변수.


일반적인 C와같은 언어에서는 변수를 사용할 때 여러 변수 타입이 정해 져 있고 그 타입에 따라

크기도 정해 져 있으며 변수에 맞는 값만을 대입 할 수 있었다.


이와는 달리 파이썬에서는 변수를 선언 할 때 자료형을 명시하지 않아도 된다.


이와 같은 처리가 가능 한 이유는 파이썬에서는 모든 값을 object (이하 객체) 로 생성하여 관리하기 때문이다.


아래 코드를 보자.

# C
int nNumber = 3;
int nNumber2 = 3;

# Python
nNumber = 3
nNumber2 = 3

일반적인 C 에서는 int 라는 정수형 데이터를 담는 자료형을 가지고 있고 이러한 자료형을 갖는 변수 nNumber라는 변수를 생성한다. 그리고 이 변수가 3이라는 값을 가지게 되는 것이다.


이와는 다르게 파이썬에서는 nNumber 라는 객체와 3이라는 객체가 생성된다. 이후 nNumber라는 객체가 가르키는 값이 3이라는 객체가 되는 것이다.


이와같은 방식의 차이로 인해 파이썬에서는 여러 변수가 동일한 값을 가진다면 서로 각각의 값을 가지는 것이 아니라 하나의 객체를 가리키고있는 형태가 되게 된다.


그림으로 표현하면 아래와 같다





예시로 사용한 정수 외에도 실수, 문자열 등 다양한 변수를 이용 할 때에도 각각이 하나의 객체가 되고 변수는 그 객체를 가르키고 있을 뿐이기 때문에 별도의 자료형 선언 없이 변수 선언이 가능 해 진다.

저작자표시 비영리 (새창열림)

'Programming > Python' 카테고리의 다른 글

파이썬에서 리스트를 사용 하자.  (0) 2016.06.08
파이썬 문자열 개행문자 제거하기  (3) 2016.06.03
파이썬에서 문자열을 이용하자  (0) 2016.06.03
파이썬의 기본 수식 연산자  (0) 2016.06.03
파이썬에서 한글을 처리하기 위한 방법  (0) 2016.06.02
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

파이썬의 기본 수식 연산자

Programming/Python 2016. 6. 3. 09:53




파이썬에서도 수식 계산을 위한 연산자들이 존재한다.


파이썬에서 사용되는 기본 수식 연산자는 아래의 7가지 이다.


  • + : 두 수를 더한다
  • - : 두 수를 뺀다
  • * : 두 수를 곱한다
  • / : 두 수를 나눈다
  • // : 두 수를 나눠 몫을 출력한다
  • % : 두 수를 나눠 나머지를 출력한다
  • ** : 거듭제곱연산

결과를 확인 해 보자. 


print "29 + 6 = ",  29 + 6
print "29 - 6 = ", 29 - 6
print "29 * 6 = ", 29 * 6
print "29 / 6 = ", 29 / 6
print "29 // 6 = ", 29 // 6
print "29 % 6 = ", 29 % 6
print "2^6 = ", 2 ** 6

위와 같이 작성하고 실행 해 보면 아래와 같은 결과를 얻을 수 있다.


29 + 6 =  35
29 - 6 = 23
29 * 6 = 174
29 / 6 = 4
29 // 6 = 4
29 % 6 = 5
2^6 = 64

여기서 한가지 특이한 점은 29/6 의 결과에서 실수 연산이 아닌 정수연산을 한다는 점이다.


파이썬 2버전까지는 기본연산이 정수연산이고 3버전 이후로는 실수연산을 한다고 한다.


실수 연산을 하기 위해서는 상단에 

from __future__ import division

해당 구문을 추가 해 주면 된다.


다시 동일한 연산을 수행 해 보면

29 + 6 =  35
29 - 6 = 23
29 * 6 = 174
29 / 6 = 4.83333333333
29 // 6 = 4
29 % 6 = 5
2^6 = 64

아까의 연산과는 달리 29/6 의 연산이 실수형으로 계산 됨을 확인 할 수 있다.


저작자표시 비영리 (새창열림)

'Programming > Python' 카테고리의 다른 글

파이썬에서 리스트를 사용 하자.  (0) 2016.06.08
파이썬 문자열 개행문자 제거하기  (3) 2016.06.03
파이썬에서 문자열을 이용하자  (0) 2016.06.03
파이썬에서 변수를 이용하기. 자료형이 없어도 가능! (Variable)  (0) 2016.06.03
파이썬에서 한글을 처리하기 위한 방법  (0) 2016.06.02
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

파이썬에서 한글을 처리하기 위한 방법

Programming/Python 2016. 6. 2. 17:26




파이썬을 시작하고 print든 뭐든 하여간 한글을 처리해야 하는 경우가 있다.


있다기 보다 사실 많이 쓰지..


아무 생각없이

>>> print("한글") 


할 경우 정상 동작하지 않고 에러를 뿜뿜한다.


기본값으로 한글에 대한 처리를 해주지 않는 듯 하다.


이러한 문제를 해결하기 위해서는 .py 파일 최상단에 


#-*- coding: utf-8 -*-


이렇게 한줄만 추가 해주면 된다.


별다른 처리 없이 저놈만 넣어주만 한글 처리를 해 주는군..

저작자표시 비영리 (새창열림)

'Programming > Python' 카테고리의 다른 글

파이썬에서 리스트를 사용 하자.  (0) 2016.06.08
파이썬 문자열 개행문자 제거하기  (3) 2016.06.03
파이썬에서 문자열을 이용하자  (0) 2016.06.03
파이썬에서 변수를 이용하기. 자료형이 없어도 가능! (Variable)  (0) 2016.06.03
파이썬의 기본 수식 연산자  (0) 2016.06.03
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

class를 포함한 dll 만들기 ( 클래스 동적 라이브러리 )

Programming/C, C++, MFC 2016. 5. 17. 20:05




dll을 만들어야 할 상황에서 일반적으로는 함수를 만드는 경우가 대부분이지만 


클래스 자체를 포함하는 dll을 만들어야 할 경우가 있다.


이런 경우 클래스를 포함하는 dll을 만드는 방법에 대한 정리.



필요로 하는 클래스가 선언 및 정의 된 Class.cpp 와 Class.h 가 있고

이녀석을 감싸기 위한 ClassDLL.cpp 와 ClassDLL.h 를 준비하자.


< Class.h >

  1. #pragma once
  2.  
  3. class Source
  4. {
  5. public:
  6. int add(int a, int b);
  7. int mul(int a, int b);
  8. };


< Class.cpp >

  1. #include "Class.h"
  2.  
  3. int Source::add(int a, int b)
  4. {
  5.   return a + b;
  6. }
  7.  
  8. int Source::mul(int a, int b)
  9. {
  10.   return a*b;
  11. }



이제 이녀석을 감싸기 위한 ClassDLL.cpp와 ClassDLL.h를 만들자.


< ClassDLL.h >

  1. #ifdef DLLEXPORT
  2. #define MYDLLTYPE __declspec(dllexport)
  3. #else
  4. #define MYDLLTYPE __declspec(dllimport)
  5. #endif
  6.  
  7. typedef void* pSource;
  8.  
  9. extern "C" MYDLLTYPE SourceConstruct();
  10. extern "C" MYDLLTYPE int SourceAdd(pSource money, int a, int b);
  11. extern "C" MYDLLTYPE int SourceMul(pSource money, int a, int b);
  12. extern "C" MYDLLTYPE void SourceDestruct(pSource money);


< ClassDLL.cpp >

  1. #define DLLEXPORT
  2. #include "ClassDLL.h"
  3.  
  4. extern "C" MYDLLTYPE pSource SourceConstruct()
  5. {
  6.   Source* source = new Source();
  7.   return (pSource)source;
  8. }
  9.  
  10. extern "C" MYDLLTYPE int SourceAdd(pSource source, int a, int b)
  11. {
  12.   Source* source = (Source*)source;
  13.   return source->add(a, b);
  14. }
  15.  
  16. extern "C" MYDLLTYPE int SourceMul(pSource source, int a, int b)
  17. {
  18.   Source* source = (Source*)source;
  19.   return source->mul(a, b);
  20. }
  21.  
  22. extern "C" MYDLLTYPE void SourceDestruct(pSource source)
  23. {
  24.   Source* source = (Source*)source;
  25.   delete source ;
  26. }



이렇게 만들어 주고 빌드하면 lib 와 dll 이 생성 되겠지..


이놈들을 사용할때는 아래와 같이 사용한다.

  1. #include <stdio.h>
  2. #include "ClassDLL.h"
  3.  
  4. #pragma comment(lib, "ClassDLL.lib")
  5.  
  6. void main()
  7. {
  8.   pSource source = SourceConstruct();
  9.  
  10.   const int a = 2, b = 3;
  11.   printf("%d + %d = %d\n", a, b, SourceAdd(source, a, b));
  12.   printf("%d * %d = %d\n", a, b, SourceMul(source, a, b));
  13.  
  14.   SourceDestruct(source);
  15. }



나중에 쓸 일이 있을 것 같아서 정리.




참고 : http://egloos.zum.com/tain68/v/10421967

저작자표시 비영리 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

'제약 조건과 일치하는 올바른 내보내기를 찾을 수 없습니다' 해결방법  (0) 2017.10.16
프로그램 배포시 아이콘과 MFC dll 관련 설정  (0) 2017.06.08
visual studio 프로젝트 및 솔루션 이름을 변경하기.  (0) 2016.05.17
HTTP 프로토콜을 이용하여 웹상의 파일을 다운로드 하자.  (0) 2016.03.09
[Function] 폴더 내 파일 탐색  (0) 2015.12.09
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

visual studio 프로젝트 및 솔루션 이름을 변경하기.

Programming/C, C++, MFC 2016. 5. 17. 11:09




프로젝트명 수정이 필요한 경우가 종종 있는데 이 경우 사용 가능한 방법인듯..


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


급하게 프로젝트를 만들다보니, 혹은 개발하다 보니, 프로젝트 명을 바꿔야 한다면??


*.sln 파일을 메모장에서 열어서 수정하자!


FirstTestName 이라는 프로젝트가 있으면


1. FirstTestName.sln 을 메모장에서 연다.

Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FirstTestName", "FirstTestName\FirstTestName.vcproj", "{01687A62-7B7A-4F47-B8FB-38B2A291BA7D}"

이렇게 바꾼다.

Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NewName", "NewName\NewName.vcproj", "{01687A62-7B7A-4F47-B8FB-38B2A291BA7D}"


2. FirstTestName 이라는 모든 걸 NewName으로 바꾼다. 물로 폴더 명까지 바꾼다.


3. FirstTestName.vcproj 라는 파일 역시 메모장에서 열어본다.

<?xml version="1.0" encoding="ks_c_5601-1987"?>

<VisualStudioProject

ProjectType="Visual C++"

Version="9.00"

Name="FirstTestName"

ProjectGUID="{01687A62-7B7A-4F47-B8FB-38B2A291BA7D}"

RootNamespace="FirstTestName"

Keyword="MFCProj"


이렇게 바꾼다.


<?xml version="1.0" encoding="ks_c_5601-1987"?>

<VisualStudioProject

ProjectType="Visual C++"

Version="9.00"

Name="NewName"

ProjectGUID="{01687A62-7B7A-4F47-B8FB-38B2A291BA7D}"

RootNamespace="NewName"

Keyword="MFCProj"

이후 다시 컴파일.


출처 : 비주얼 스튜디오 프로젝트 솔루션 이름 바꾸기 (visual studio solution name change)


저작자표시 비영리 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

프로그램 배포시 아이콘과 MFC dll 관련 설정  (0) 2017.06.08
class를 포함한 dll 만들기 ( 클래스 동적 라이브러리 )  (1) 2016.05.17
HTTP 프로토콜을 이용하여 웹상의 파일을 다운로드 하자.  (0) 2016.03.09
[Function] 폴더 내 파일 탐색  (0) 2015.12.09
성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점  (0) 2015.04.21
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

HTTP 프로토콜을 이용하여 웹상의 파일을 다운로드 하자.

Programming/C, C++, MFC 2016. 3. 9. 15:32




웹상을 파일을 프로그램을 통해 다운로드 하기 위한 함수.


여러 블로그에 글이 있지만 가장 쓰기 간단하게 잘 정리되있는 글 담아두기..


원문 중

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

getFileFromHttp("http://tattertools.com/ko/tistoryBanner01.gif", "tistoryBanner01.gif");

이미지 파일을 다운 받으려면 어떻게 해야되는지 몰라서 한참 해맸다.
URL에는 파일명까지 들어가야된다. 그리고 저장할 파일의 이름을 지정한다.
특정 폴더에 파일을 저장하려면 저장할 파일에 패스를 입력하면된다.
예를 들어 URL을 이렇게 주고 "http://wwwi.tistory.com/"
저장할 파일을 "test.html"로 주면 http://wwwi.tistory.com/의 첫페이지가  test.html로 저장된다.


  1. #include "Wininet.h"      //  밑의 함수를 쓰려면 이 라인을 반드시 추가해야 됨
  2. #define READ_BUF_SIZE    1024
  3.  
  4. // 웹상의 파일을 다운로드
  5. int getFileFromHttp(char* pszUrl, char* pszFile)
  6. {
  7.     HINTERNET    hInet, hUrl;
  8.     DWORD        dwReadSize = 0;
  9.  
  10.     // WinINet함수 초기화
  11.     if ((hInet = InternetOpen("MyWeb",            // user agent in the HTTP protocol
  12.                     INTERNET_OPEN_TYPE_DIRECT,    // AccessType
  13.                     NULL,                        // ProxyName
  14.                     NULL,                        // ProxyBypass
  15.                     0)) != NULL)                // Options
  16.     {
  17.         // 입력된 HTTP주소를 열기
  18.         if ((hUrl = InternetOpenUrl(hInet,        // 인터넷 세션의 핸들
  19.                     pszUrl,                        // URL
  20.                     NULL,                        // HTTP server에 보내는 해더
  21.                     0,                            // 해더 사이즈
  22.                     0,                            // Flag
  23.                     0)) != NULL)                // Context
  24.         {
  25.             FILE    *fp;
  26.  
  27.             // 다운로드할 파일 만들기
  28.             if ((fp = fopen(pszFile, "wb")) != NULL)
  29.             {
  30.                 TCHAR    szBuff[READ_BUF_SIZE];
  31.                 DWORD    dwSize;
  32.                 DWORD    dwDebug = 10;
  33.  
  34.                 do {
  35.                     // 웹상의 파일 읽기
  36.                     InternetReadFile(hUrl, szBuff, READ_BUF_SIZE, &dwSize);
  37.  
  38.                     // 웹상의 파일을 만들어진 파일에 써넣기
  39.                     fwrite(szBuff, dwSize, 1, fp);
  40.  
  41.                     dwReadSize += dwSize;
  42.                 } while ((dwSize != 0) || (--dwDebug != 0));
  43.  
  44.                 fclose( fp );
  45.             }
  46.             // 인터넷 핸들 닫기
  47.             InternetCloseHandle(hUrl);
  48.         }
  49.         // 인터넷 핸들 닫기
  50.         InternetCloseHandle(hInet);
  51.     }
  52.     return(dwReadSize);
  53. }


출처 : http://wwwi.tistory.com/35


저작자표시 비영리 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

class를 포함한 dll 만들기 ( 클래스 동적 라이브러리 )  (1) 2016.05.17
visual studio 프로젝트 및 솔루션 이름을 변경하기.  (0) 2016.05.17
[Function] 폴더 내 파일 탐색  (0) 2015.12.09
성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점  (0) 2015.04.21
[VS2013] error MSB8031 - 멀티바이트문자집합 에러를 해결하자.  (0) 2015.03.06
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

폴더 내의 파일목록을 다뤄보자. 폴더 내 파일 리스트 만들기

Programming/기타 etc. 2015. 12. 17. 10:37




이제는 윈도우로 인해 대부분이 사용하지 않는 dos 명령어.


그중에 잘 쓰면 편리한 것들이 많이 있다.


오늘은 디렉토리 내 파일 목록과 관련된 dir 명령어를 정리 해 보자.


이 명령어를 이용하면 폴더 내 파일의 리스트를 한번에 출력하는등 은근 깨알같이 도움이 된다.


일반적으로 dir 명령어의 사용법은 아래와 같다


>> dir [path] [flag]


path의 경우 별도로 지정하지 않을 경우 현재 위치를 기준으로 실행하게 된다.


flag에 사용가능한 옵션은 아래와 같다. 


=========== Option ==========================================================

/A : 지정된 특성을 가진 파일을 보여줍니다.

  • D 디렉터리
  • R 읽기 전용 파일
  • H 숨김 파일 
  • A 기록 파일
  • S 시스템 파일 

/B : 최소 형식을 사용합니다 (머리말 정보나 요약 없음).
/C : 파일 크기에 1000단위로 분리 기호를 보여줍니다. 이것은 기본값
입니다. 분리 기호를 표시하지 않으려면 /-C를 사용하십시오.
/D : /W와 같으나 세로로 배열하여 보여줍니다.
/L : 소문자를 사용합니다.
/N : 파일 이름이 제일 오른쪽에 오도록 새로운 긴 목록 형식을 사용합니다.
/O : 파일을 정렬된 순서로 보여줍니다.

  • N 이름순(문자 순서)
  • S 크기순(작은 것 먼저)
  • E 확장명순(문자 순서)
  • D 날짜/시간순(가장 이전 것 먼저)
  • G 그룹 디렉터리 먼저 

/P : 정보가 한 화면에 꽉 차면 잠깐 멈춥니다.
/Q : 파일 소유자를 보여 줍니다.
/S : 지정한 디렉터리와 하위 디렉터리를 포함하여 보여줍니다.
/T : 정렬에 사용할 시간 필드를 지정합니다.

  • C 작성한 시간
  • A 마지막 액세스한 시간
  • W 마지막 기록한 시간

/W : 이름만 가로로 배열하여 보여줍니다.
/X : 8.3 파일 이름이 아닌 파일에 대한 짧은 이름을 보여줍니다.
    이 형식은 긴 이름 앞에 짧은 이름이 추가된 것으로 /N 형식과
    같습니다. 짧은 이름이 없으면 공백을 보여줍니다.
/4 : 4자리수 연도를 표시합니다.


출처 : http://blog.naver.com/iwishsinji/140007608531

=========== Option ==========================================================


/A, /O, /T와 같이 옵션을 갖는 경우에는 /A:D 와 같이 콜론을 이용하여 옵션을 표시 해 준다.

[출처] dir 도움말|작성자 그냉이



이렇게만 사용하면 CMD 창에 리스트가 출력된다.


이제 이놈들을 우리가 원하는 파일로 출력을 하려면 


>Filename.txt 또는 >Filename.xls 를 뒤에 붙여주면 지정한 Filename으로 파일이 만들어 진다.


즉 파일 리스트를 만들고 싶다 하는 경우에는 아래와 같이 쓸 수 있다는 얘기


>> dir /b /d >list.txt

저작자표시 비영리 (새창열림)

'Programming > 기타 etc.' 카테고리의 다른 글

[Git] github -> gitlab / repository를 이사하자  (0) 2021.12.06
[ROS] Rosbag2Video  (0) 2021.11.30
float 값의 비교 (== 연산자는 위험하다!)  (0) 2021.04.13
google drive web client 사용량 제한  (0) 2021.02.25
pycharm 사용 및 환경설정 팁  (0) 2019.03.18
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

[Function] 폴더 내 파일 탐색

Programming/C, C++, MFC 2015. 12. 9. 09:41




프로젝트를 진행하다 보니 MFC가 편할때도 있지만 불편한 경우도 많은 것 같다.


MFC 위주로 코딩햇지만 이제는 MFC를 자제하려고 노력중.


폴더 내 파일 탐색을 할 경우 MFC 에서는 CFileFinder 가 있어서 편했지만 


c++에서 이녀석을 대체할 _finddata_t 를 이용해서 파일을 탐색 해보자.


  1. #include <io.h>
  2.  
  3. _finddata_t filefinder;
  4. long handle;
  5. int nExistNext = 1;
  6.  
  7. handle = _findfirst(".\\*.*", &filefinder);
  8.  
  9. if (handle == -1)
  10. {
  11.         printf("There was no file.\n");
  12.         return;
  13. }
  14.  
  15. while (nExistNext != -1)
  16. {
  17.         printf("FileName : %s\n", filefinder.name);
  18.         nExistNext = _findnext(handle, &filefinder);
  19. }
  20.  
  21. _findclose(handle);
  22. return;


저작자표시 비영리 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

visual studio 프로젝트 및 솔루션 이름을 변경하기.  (0) 2016.05.17
HTTP 프로토콜을 이용하여 웹상의 파일을 다운로드 하자.  (0) 2016.03.09
성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점  (0) 2015.04.21
[VS2013] error MSB8031 - 멀티바이트문자집합 에러를 해결하자.  (0) 2015.03.06
Dialog에 Drag&Drop 기능을 적용하자.  (0) 2014.12.01
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

jpeg 파일 디코딩하기.

Programming/OpenCV 2015. 11. 11. 17:36




일반적으로 OpenCV를 이용하여 영상을 읽을 때 imread 나 cvLoadImage를 이용하여 읽어온다.


직접 읽어 올 경우는 내부적으로 다 처리를 해 주겠지만 jpeg 같은 decoding 되지 않은 파일을 포인터로 받아서


사용하고자 할 때는 decoding 작업이 필요하게 된다.


이 또한 OpenCV에서 제공하니 가져다 쓰기만 하면 되지..


다음에 기억 안날거 같으니까 적어둬야지..



  1. int nBufferLength;
  2. unsigned char pBuffer;
  3.  
  4. Mat EncodedData = Mat(1, nBufferLength, pBuffer);
  5. Mat DecodedImage = imdecode(EncodedData, 1);


imdecode 가 이 글의 핵심 부분이고 알아서 디코딩 작업을 처리 해 주는듯.

두번째 파라미터는 imread 의 flag와 동일한 파라미터.



저작자표시 비영리 (새창열림)

'Programming > OpenCV' 카테고리의 다른 글

폰트 변경이 가능한 putText를 사용하자  (0) 2021.04.29
OpenCV FileStorage를 이용하여 xml을 읽고 쓰자  (0) 2020.10.07
unsigned char* 형 버퍼를 IplImage 또는 Mat 으로 변환하기.  (0) 2014.08.18
[Function] HoG Destriptor in OpenCV  (0) 2014.01.27
[Function] 영상을 회전 시키기  (0) 2014.01.23
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

Picture Control에 영상 출력하기.

Programming/Windows 2015. 5. 27. 22:02




예전에 리소스 등록하여 BMP 출력하는거 썼었네..


이번에는 IplImage 등의 구조체로 읽어들인 영상을 Picture Control에 출력하는 방법을 다룬다.


당장은 쓸 일 없지만 나중에 쓸라그럼 내머리가 기억을 못할테니..


적어놔야지..

//-----------------------------------------------------

// 사용할 영상

IplImage* tmp = cvLoadImage("경로\\SIMG_3380.jpg");

    

    CDC* pDC;

    CRect rect;

// m_stDisplay 는 picture control의 멤버변수명.

    pDC = m_stDisplay.GetDC();

    m_stDisplay.GetClientRect(&rect);



    BITMAPINFO bitmapInfo;

    bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

    bitmapInfo.bmiHeader.biPlanes = 1;

    bitmapInfo.bmiHeader.biCompression = BI_RGB;

    bitmapInfo.bmiHeader.biXPelsPerMeter = 100;

    bitmapInfo.bmiHeader.biYPelsPerMeter = 100;

    bitmapInfo.bmiHeader.biClrUsed = 0;

    bitmapInfo.bmiHeader.biClrImportant = 0;

    bitmapInfo.bmiHeader.biSizeImage = 0;

    bitmapInfo.bmiHeader.biWidth = tmp->width;

    bitmapInfo.bmiHeader.biHeight = -tmp->height;

    IplImage* tempImage;

    if (tmp->nChannels == 3)

    {

        tempImage = (IplImage*)cvClone(tmp);

        bitmapInfo.bmiHeader.biBitCount = tempImage->depth * tempImage->nChannels;

    }

    else if (tmp->nChannels == 1)

    {

        tempImage = cvCreateImage(cvGetSize(tmp), IPL_DEPTH_8U, 3);

        cvCvtColor(tmp, tempImage, CV_GRAY2BGR);

        bitmapInfo.bmiHeader.biBitCount = tempImage->depth * tempImage->nChannels;

    }

    pDC->SetStretchBltMode(COLORONCOLOR);

    ::StretchDIBits(pDC->GetSafeHdc(), rect.left, rect.top, rect.right, rect.bottom,

        0, 0, tempImage->width, tempImage->height, tempImage->imageData, &bitmapInfo,

        DIB_RGB_COLORS, SRCCOPY);

    cvReleaseImage(&tempImage);


// release 잘해주기.

    ReleaseDC(pDC);


    cvReleaseImage(&tmp);

//-----------------------------------------------------


결과 :


아래처럼 Picture Control을 생성 해두고 

출력 하면 딱 사이즈 맞게 출력된다.


아래는 덤으로.. 테스트에 사용된 사진.


작년 제주도에서 찍은 사진. 나름 맘에들어. ㅋㅋ


저작자표시 비영리 (새창열림)

'Programming > Windows' 카테고리의 다른 글

taskkill 명령어를 이용하여 프로세스를 강제종료하자  (0) 2017.02.16
CWnd <- -> HWND  (0) 2015.05.27
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

CWnd <- -> HWND

Programming/Windows 2015. 5. 27. 21:27




1.함수에서 CWnd 가 필요한데 HWND밖에 없을 때

    CWnd* pWnd = CWnd::FromHandle(HWND);

2.HWND가 필요한데 CWnd 밖에 없을때

   HWND hWnd  =  pWnd->m_hWnd; 

저작자표시 비영리 (새창열림)

'Programming > Windows' 카테고리의 다른 글

taskkill 명령어를 이용하여 프로세스를 강제종료하자  (0) 2017.02.16
Picture Control에 영상 출력하기.  (0) 2015.05.27
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점

Programming/C, C++, MFC 2015. 4. 21. 13:56





if 와 switch 비슷하지만 다른녀석 


이 아이들의 특징을 잘 정리해 주신 분이 있어 메모.


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


if~else 문과 switch~case 문의 차이점에 관해서 알아보자...

코드는 다음과 같이 작성 해 보았다.






이 예제를 보면 분석하기 쉬울 것이다.

if문 예제에 대한 assembly 코드는 다음과 같다.





위 assembly 코드를 보면 1,2,3,4를 보면 각 조건문마다 cmp 명령문을 사용한 것을 볼 수 있다.

따라서, 최악의 경우에 조건문의 개수만큼 cmp를 하게 된다.O(n)의 시간복잡도를 갖는다고 말할 수 있겠다.



switch 문에 대한 assembly코드이다.


이 코드에 관해 약간의 설명을 하겠다.


1 : ecx 레지스터으 ㅣ값을 1 감소한다. 이는 switch 문에서 대상이 되는 값을 1 감소하는 것이다.

이때, 항상 1을 감소하는 것이 아니라 case 문 중에서 가장 작은 값을 ecx레지스터에서 뺴는 것이다.

이렇게 하면 switch문에서 ecx레지스터으 ㅣ값은 (case문의 개수 - 1)이 된다.

이게 바로 switch문에서 쓰이는 jump table의 크기가 되는 것이다.

-1을 하는 이유는 배열의 시작 번지가 0이기 때문이다. 

3번에서 jmp명령어를 보면 배열을 이용하여 jump table에 접근하는 것을 볼 수 있다.


2 : switch 문에 있는 변수값 (a)가 3보다 큰지를 검사하고 있다.

만일에 크다면 jump할 case문이 없으므로 default 문으로 이동하도록 하는 코드이다.

이때 3과 비교하는 것은 case문에서 (가장 큰 값 -1) 이 3이기 때문이다.

만이레 3보다 크다면 jump 할 case문이 없기 때문이다.


3 : jump 할 case 문이 있을 경우 이 코드에 진입을 한다.

이 코드에 진입 한 후 jump table을 뒤져보는 것이다. 

jump table에 mapping 되는 값으로 jump 하도록 되어있다.


4 : 이곳이 바로 jump table 이다. 

이 jump table의 크기는 (case문의 가장큰값 - case문의 가장작은값 + 1)이다.

이 jump table의 각 원소의 값은 jump 할 label 이다.


그렇다면 정말로 jump table의 크기가 (case문의 가장큰값 - case문의 가장작은값 + 1)일까 ??


그렇다면 case 1, case 2, case 3, case 10이라면 jump table의 크기가 어떻게 될까 ???


최적화의 관점에서 보자면, 테이블의 크기가 4ㅇ리면 좋겠지만, 애석하게도 성능의 향상을 위해서 테이블의 크기를 10으로 했다.


다음 C 코드를 보자



If 문의 assembly 코드는 다음과 같다. 특별한 점은 없다. 앞에서 설명한 것과 동일하다.





하지만, switch 문에서 jump table을 보면 다음과 같다.



$541에는 jump table의 index 번호가 저장되어 있고, 실제로 jump table은 $542에 저장되어 있음을 알 수 있다.


만약에 case 1, case 2, case 3, case 100000 이라면 메모리는 상당히 많이 차지 할 것이다.


성능을 향상 시키느냐 메모리를 향상 시키느냐는 결국 선택해야 할 문제이다.


만약에 if~else문이 매우 많이 있고, 그 함수를 매우 많이 호출하는데, 성능이 중요하다면 


switch case 문으로 성능 향상을 할 수 있을 것이다.


또한, switch case 문에서 case의 값은 가급적이면 순차적으로 감소 또는 증가하는 것이 메모리 관리면에서 좋을 것이다.


마지막으로 case문의 개수에 따라 switch 문은 jump tableㅇ르 사용 할 것인지 사용하지 않을 것인지를 결정한다.


이 case 문의 개수가 4이상이냐 아니냐는 것이다.


만약에 case 문의 개수가 4 이상이면 jump table을 사용하고, 그렇지 않다면 사용하지 않는다. 


출처 : http://blog.naver.com/PostView.nhn?blogId=kki2406&logNo=80041410085




저작자표시 비영리 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

HTTP 프로토콜을 이용하여 웹상의 파일을 다운로드 하자.  (0) 2016.03.09
[Function] 폴더 내 파일 탐색  (0) 2015.12.09
[VS2013] error MSB8031 - 멀티바이트문자집합 에러를 해결하자.  (0) 2015.03.06
Dialog에 Drag&Drop 기능을 적용하자.  (0) 2014.12.01
rand() 는 랜덤이 아니다?? 이제는 랜덤을 바꿔야 할 때!  (0) 2014.11.21
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

Kinect v2 를 이용하여 Depth 영상을 사용하자. (키넥트2)

Programming/Kinect V2 2015. 3. 16. 14:32






지난 글에서 컬러 영상을 출력하는 방법을 정리했다. ( Kinect v2 를 이용하여 RGB 영상을 사용하자. (키넥트2) )


이번에는 depth 영상을 출력하는방법 정리.


컬러 영상을 이용할 때와 프레임 소스와 리더 클래스의 이름만 조금 다를 뿐 실제 사용법은 동일하다.




  1. // Kinect Open
  2. IKinectSensor* kinect = NULL;
  3. GetDefaultKinectSensor( &kinect );
  4. kinect->Open();
  5.  
  6. // depth
  7. // source
  8. IDepthFrameSource* pDepthSource = NULL;
  9. pSensor->get_DepthFrameSource(&pDepthSource);
  10.  
  11. // reader
  12. IDepthFrameReader* pDepthReader = NULL;
  13. pDepthSource->OpenReader(&pDepthReader);
  14.  
  15. // description
  16. IFrameDescription* pDescriptionDepth = NULL;
  17. pDepthSource->get_FrameDescription(&pDescriptionDepth);
  18.  
  19. int widthDepth = 0;
  20. int heightDepth = 0;
  21. pDescriptionDepth->get_Width(&widthDepth); // 512
  22. pDescriptionDepth->get_Height(&heightDepth); // 424
  23.  
  24. unsigned int bufferSize = width * height * sizeof( unsigned short );
  25.  
  26. cv::Mat bufferMatDepth(heightDepth, widthDepth, CV_16UC1);
  27. cv::Mat depthMatDepth(heightDepth, widthDepth, CV_8UC1);
  28. cv::namedWindow("Depth");
  29.  
  30.  
  31. while(1)
  32. {
  33.         IDepthFrame* pDepthFrame = NULL;
  34.         pDepthReader->AcquireLatestFrame(&pDepthFrame);
  35.         pDepthFrame->AccessUnderlyingBuffer(&bufferSizeDepth, reinterpret_cast<UINT16**>(&bufferMatDepth.data));
  36.        
  37.         SafeRelease(pDepthFrame);
  38.         cv::imshow("Depth", depthMat);
  39.        
  40.         if (cv::waitKey(30) == VK_ESCAPE)               break;
  41. }
  42.  
  43.  
  44. // release memory
  45. SafeRelease(pDepthSource);
  46. SafeRelease(pDepthReader);
  47. SafeRelease(pDescription);
  48.  
  49. if (pSensor)
  50. {
  51.         pSensor->Close();
  52. }
  53. SafeRelease(pSensor);





결과영상

저작자표시 비영리 (새창열림)

'Programming > Kinect V2' 카테고리의 다른 글

Kinect v2 를 이용하여 RGB 영상을 사용하자. (키넥트2)  (3) 2015.03.16
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

Kinect v2 를 이용하여 RGB 영상을 사용하자. (키넥트2)

Programming/Kinect V2 2015. 3. 16. 14:25





키넥트 2 예제 프로그램이 많이 공개되어 있는 가운데 에러 처리함수를 제외하고 꼭 있어여 할 부분만 정리.


키넥트 2 에서는 영상을 출력하는 방식이


센서열고 -> 소스받고 -> 프레임리더를 이용 -> 프레임 디스크립터를 받아와서 -> 출력 하는 방식을 이용하는 것 같다.


이와 관련된 내용은 추후에 다시한번 정리하는 걸로. 



  1. // Kinect Open
  2. IKinectSensor* kinect = NULL;
  3. GetDefaultKinectSensor( &kinect );
  4. kinect->Open();
  5.  
  6. // color
  7. // source
  8. IColorFrameSource* pColorSource = NULL;
  9. pSensor->get_ColorFrameSource(&pColorSource);
  10.  
  11. // reader
  12. IColorFrameReader* pColorReader = NULL;
  13. pColorSource->OpenReader(&pColorReader);
  14.  
  15. // description
  16. IFrameDescription* pDescriptionColor = NULL;
  17. pColorSource->get_FrameDescription(&pDescriptionColor);
  18.  
  19. int widthColor = 0;
  20. int heightColor = 0;
  21. pDescriptionColor->get_Width(&widthColor);             
  22. pDescriptionColor->get_Height(&heightColor);    
  23.  
  24. unsigned int bufferSizeColor = widthColor * heightColor * 4 * sizeof(unsigned char);
  25.  
  26. cv::Mat bufferMatColor(heightColor, widthColor, CV_8UC4);
  27. cv::Mat colorMatColor(heightColor / 2, widthColor / 2, CV_8UC4);
  28. cv::namedWindow("Color");
  29.  
  30. while(1)
  31. {
  32.         IColorFrame* pColorFrame = NULL;
  33.         pColorReader->AcquireLatestFrame(&pColorFrame);
  34.         pColorFrame->CopyConvertedFrameDataToArray(bufferSizeColor, reinterpret_cast<BYTE*>(bufferMatColor.data),ColorImageFormat::ColorImageFormat_Bgra);
  35.         cv::resize(bufferMatColor, colorMatColor, cv::Size(), 0.5, 0.5);
  36.        
  37.         SafeRelease(pColorFrame);
  38.         cv::imshow("Color", colorMatColor);
  39.        
  40.         if (cv::waitKey(30) == VK_ESCAPE)               break;
  41. }
  42.  
  43. // release memory
  44. SafeRelease(pColorSource);
  45. SafeRelease(pColorReader);
  46. SafeRelease(pDescriptionColor;
  47.  
  48. if (pSensor)
  49. {
  50.         pSensor->Close();
  51. }
  52. SafeRelease(pSensor);






결과영상

저작자표시 비영리 (새창열림)

'Programming > Kinect V2' 카테고리의 다른 글

Kinect v2 를 이용하여 Depth 영상을 사용하자. (키넥트2)  (0) 2015.03.16
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

[VS2013] error MSB8031 - 멀티바이트문자집합 에러를 해결하자.

Programming/C, C++, MFC 2015. 3. 6. 17:08





Visual Studio 2013 이전 컴파일러에서 작성된 멀티바이트문자집합 스타일의 프로젝트를 VS2013에서 불러와


변환후 컴파일 하면 못보던 에러 메세지를 하나 볼 수 있다.


error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for more information. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets 369 5 IOKF_Client



이녀석은 VS2013부터 멀티바이트문자집합용 MFC 라이브러리가 포함되지 않은 채 나오기 떄문이라 하네..

그래 유니코드들 쓰시라.. ㅋㅋ 


사용 해야 할 경우에는 MS 에서 제공하는 " Visual Studio 2013용 멀티바이트 MFC 라이브러리 " 를 설치하면 이문제는 해결된다.


다운로드는 하단 링크 추가.

 

http://www.microsoft.com/ko-kr/download/details.aspx?id=40770

저작자표시 비영리 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

[Function] 폴더 내 파일 탐색  (0) 2015.12.09
성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점  (0) 2015.04.21
Dialog에 Drag&Drop 기능을 적용하자.  (0) 2014.12.01
rand() 는 랜덤이 아니다?? 이제는 랜덤을 바꿔야 할 때!  (0) 2014.11.21
fatal error LNK1123: COFF로 변환하는 동안 오류가 발생했습니다.  (0) 2014.07.29
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

Dialog에 Drag&Drop 기능을 적용하자.

Programming/C, C++, MFC 2014. 12. 1. 20:39







파일을 이용할때, 매번 file dialog 열어서 경로 찾아가기 귀찮다.


혹은 뭐 어떻게든 프로그램내의 것이 아닌 파일을 그냥 끌어다 놓으면 적용됐으면 좋겠다 싶어서


dialog에 drag&drop 기능을 간단하게 적용해 봄봄. (이제겨울인데 봄은 언제오지..)


생각했던 것보다 파일 주소만 가져올때는 간단하더라. 


제일 먼저 OnInitDialog()에 DragAcceptFiles(TRUE); 추가

[출처] 다이얼로그에 파일 드래그 앤 드랍|작성자 DK


그다음 WM_DROPFILES 윈도우메세지를 추가 해 준다.



마법사를 이용하면 간단하게 처리 된다.


마법사를 이용하지 않을 경우 

  • 메세지 맵에 ON_WM_DROPFILES();
  • 헤더에    afx_msg void OnDropFiles(HDROP hDropInfo);
  • cpp에    void 클래스명::OnDropFiles(HDROP hDropInfo){   }


위 세가지를 추가 해 준다.


OnDropFiles 함수에서는 뭐 여러가지 처리가 가능한가 본데 나는 파일 주소 불러오는것만 사용한다 일단.

가장 간단한 기본 코드



  1. void CGTPositionViewerDlg::OnDropFiles(HDROP hDropInfo)
  2. {
  3.         int NumDropFiles = 0;
  4.         char FilePath[MAX_PATH];                // minwindef.h 에서 MAX_PATH 는 260으로 define 되어 있다.
  5.  
  6.         NumDropFiles = DragQueryFileA(hDropInfo, 0xFFFFFFFF, FilePath, MAX_PATH);
  7.  
  8.         for (int i = 0; i < NumDropFiles; i++)
  9.         {
  10.                 DragQueryFileA(hDropInfo, i, FilePath, MAX_PATH);       // Get File Path
  11.  
  12.                 CString str = char2CString(FilePath);                           // 확인용
  13.                 AfxMessageBox(str);
  14.         }
  15.  
  16.         CDialogEx::OnDropFiles(hDropInfo);
  17. }



함수 다 적었으면 컴파일 하고 dialog에 파일을 드랍하면 파일경로가 뜨는걸 확인 할 수 있다.



저작자표시 비영리 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점  (0) 2015.04.21
[VS2013] error MSB8031 - 멀티바이트문자집합 에러를 해결하자.  (0) 2015.03.06
rand() 는 랜덤이 아니다?? 이제는 랜덤을 바꿔야 할 때!  (0) 2014.11.21
fatal error LNK1123: COFF로 변환하는 동안 오류가 발생했습니다.  (0) 2014.07.29
변수의 메모리 할당과 #pragma pack()  (0) 2014.07.23
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • »

카테고리

  • 살다보니.. (450) N
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (147)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (58)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (8)
    • 전공관련 (80)
      • Algorithm (6)
      • Deep Learning (54)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (8)
    • Computer (120) N
      • Utility (21)
      • Windows (31)
      • Mac (4)
      • Ubuntu, Linux (60) N
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • 에누리닷컴
  • DeepLearning
  • Convolutional Neural Networks
  • Deep Learning
  • 오봉자싸롱
  • portugal
  • 매트랩
  • 후쿠오카
  • ColorMeRad
  • 큐슈
  • SVM
  • 일본
  • matlab function
  • 딥러닝
  • CStdioFile
  • review
  • DSLR
  • ReadString
  • 매트랩 함수
  • 갤럭시노트3
  • function
  • random variable
  • 포르투갈
  • utility
  • matlab
  • 칼로리 대폭발
  • 스마트체험단
  • 크롬
  • LIBSVM
  • Computer Tip

달력

«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
08-26 09:45

LATEST FROM OUR BLOG

RSS 구독하기

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바