CString 사용

CAtlArray <CString> a;


a.add("111");

a.add("222");

  1. a[i].GetBuffer() 안됌
    a.GetAt(i) 사용
      1. GetBuffer : 수정할 경우
      2. GetString : 값을 참조 할 경우
      3. strcpy(a.GetBuffer(), a.GetString());

-The String as an array
GetLength : 설정된 문자열의 길이를 리턴
int GetLength() const;

IsEmpth : 문자열의 버퍼가 비워져 있는지 검사
BOOL IsEmpth() const;

Empty : 문자열을 삭제하여 버퍼를 비운다
void Empty();

GetAt : 특정위치의 문자값을 얻는다.

TCHAR GetAt(int nIndex) const;


operator[]

TCHAR operator[](int nIndex)const


SetAt

void SetAt(int nIndex, TCHAR ch);


operator LPCTSTR

operator LPCTSTR() const;


-Comparison

Compare :  대소문자 구분

int Compare(LPCTSTR lpsz) const;


CompareNoCase : 대소문자 구분 안함 

int CompareNoCase(PCTSTR lpsz) const;


Collate

int Collate(LPCTSTR lpsz) const;


CollateNoCase

int CollateNoCase(LPCTSTR lpsz) const;


-Extraction

Mid : 문자열의 중간부분을 추출한다.

CString Mid(int nFirst) const;

CString Mid(int nFirst, int nCount) const;


Left : 문자열의 왼쪽부분을 추출한다.

CString Let(int nCount) const;


Right: 문자열의 오른쪽부분을 추출한다.

CString Right(int nCount) const;


SpanIncludeing: 포함된 문자를 추출

CString SpanIncluding(LPCTSTR lpszCharSet) const;


SpanExcluding 



-Other Conversions

MakeUpper : 소문자를 대문자로 바꾼다.

void MakeUpper();





'and so on > 문자열' 카테고리의 다른 글

꼮꼮읽어보기  (0) 2012.12.20
msdn  (0) 2012.12.18
UTF-8, UNICODE, ANSI - 인코딩에 대하여  (0) 2012.12.18
멀티/유니->utf8, utf8->멀티/유니  (0) 2012.12.10
형변환 주의하기  (0) 2012.12.10

const 과 #define

① #define이 정의하는 매크로 상수는 타입을 지정할 수 없지만 const는 타입을 명확하게 지정할 수 있다. 위 예에서 Day는 실수 24.0이나 문자열 "24"가 아닌 정수형의 24라는 것을 분명하게 지정한다. C++은 타입을 중요시하기 때문에 상수의 정확한 타입이 의미를 가지는 경우가 있다.

② 매크로 상수는 일단 정의된 후에는 언제든지 어느 곳에서나 사용할 수 있지만 const는 통용 범위 규칙의 적용을 받기 때문에 자신이 선언된 범위 내에서만 사용할 수 있다. 함수 내부에서 선언한 상수는 함수 내부에서만 사용할 수 있으며 함수 밖으로는 알려지지 않는다. 즉, 지역 상수를 만들 수 있으며 명칭간의 충돌을 최소화할 수 있다.

③ #define은 컴파일러가 아닌 전처리기에 의해 치환되기 때문에 실제 소스에는 매크로가 치환된 상태로 실행된다. 그래서 디버깅 중에 매크로 상수의 값을 확인해 볼 수 없으며 아무리 간단한 버그라도 확인이 안되면 잡기가 어렵다. 반면 const 상수는 컴파일러가 처리하기 때문에 디버깅 중에도 값을 확인해 볼 수 있어 복잡한 단계를 통해 정의된 상수의 값도 쉽게 살펴볼 수 있다.

④ 매크로는 기계적으로 치환되기 때문에 부작용이 발생할 소지가 많다. 괄호를 싸지 않으면 연산 순위에 의해 예상하지 못한 값이 될 위험이 있다. 그러나 const 상수는 컴파일러가 문맥에 맞게 처리하므로 이런 부작용이 거의 없다. #define A 1+2의 A는 3이 될 가능성이 있을 뿐 주변 연산문에 따라 3이 아닐 수도 있지만 const int A=1+2;는 어떤 경우라도 3이다.



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


함수 포인터 사용 하는 것이 좋을 때


① 선택해야 할 함수가 두 개 이상인 경우, 예를 들어 수십개의 함수중 하나를 호출해야 한다면 함수 포인터 배열을 선언하고 그 첨자를 선택하는 것이 더 쉽다.

② 함수를 선택하는 시점과 실제로 호출하는 시점이 완전히 분리되어 있는 경우도 함수 포인터를 쓰는 것이 유리하다. 호출할 함수에 대한 조건 점검은 필요할 때 한 번만 하고 선택된 함수는 별다른 조건 점검없이 함수 포인터로 바로 호출할 수 있다.

③ 호출할 함수가 DLL같은 외부 모듈에 있고 이 함수를 동적으로 연결할 경우는 컴파일할 때 함수의 존재가 알려지지 않으므로 반드시 함수 포인터를 사용해야 한다. 함수 포인터를 사용하면 이름으로부터 원하는 함수의 번지를 찾아 호출할 수 있다.

 



'c/c++' 카테고리의 다른 글

ip/ mac 주소 얻기  (0) 2013.02.25
서비스  (0) 2013.02.25
구조체  (0) 2013.01.30
함수에서 값을 반환하는 방법  (0) 2013.01.18
CAtlArray 예제  (0) 2013.01.10

구조체

구조체 포인터를 함수 인수로 전달 vs 구조체를 함수 인수로 전달


하지만 몇 가지 차이점이 존재하는데 우선 포인터를 통해 참조 호출을 했으므로 함수 내부에서 구조체를 변경할 수 있다. 형식 인수가 실인수의 사본이 아니라 번지를 알고 있으므로 -> 연산자로 실인수 자체를 읽고 쓸 수 있는 것이다. 그리고 성능상으로도 확연한 차이가 있는데 두말할 필요없이 포인터를 전달하는 방식이 훨씬 더 빠르다. 구조체는 보통 수십 바이트이고 커지면 수백 바이트 이상이 될 수 있지만 포인터는 기껏해야 4바이트밖에 안된다.

구조체를 통째로 복사하여 전달하는 데 걸리는 시간과 4바이트의 포인터를 전달하는 데 걸리는 시간은 비교해 보나 마나다. 그래서 구조체를 함수끼리 전달해야 할 필요가 있을 때는 보통 포인터를 사용한다. 단, 구조체가 아주 작다면 가령 10바이트 정도밖에 안된다면 이런 경우는 성능상의 불이익이 별로 없으므로 구조체를 그냥 넘기는 것이 더 편리하다.

'c/c++' 카테고리의 다른 글

서비스  (0) 2013.02.25
const 과 #define  (0) 2013.01.30
함수에서 값을 반환하는 방법  (0) 2013.01.18
CAtlArray 예제  (0) 2013.01.10
IPC  (0) 2013.01.08

버그. 에러, 예외

버그(Bug) : 버그는 간단히 말해 프로그래머에 의한 에러이다. 예를 들어, 비관리 C++로 프로그래밍하는 경우, NULL 포인터를 호출하거나, 배열에서 오버플로우가 발생하거나, 할당된 메모리를 지우지 않은 경우(결국 메모리 누출로 이어지는)가 버그에 해당된다.

에러(error) : 에러는 버그와 달리 일반적으로 응용 프로그램의 사용자에 의해서 발생한다. 예를 들어, 사용자가 주민등록번호를 입력하는 난에 이상한 문자열을 입력하는 경우가 있을 수 있다. 프로그래머가 이러한 경우를 대비해서 적절한 예외 처리를 하지 않았다면 에러가 발생한다.

예외(exception) : 예외는 일반적으로 런타임 오류와 관련된 것으로서, 예방하기가 어렵거나 불가능한 것들이다. 더 이상 존재하지 않는 데이터베이스에 연결하려고 한다거나, 손상된 파일을 열려고 하거나, 오프라인 상태인 머신에 접속하려고 하는 경우 예외가 발생할 수 있다. 프로그래머나 사용자는 이러한 '예외적인' 경우에 대처하기가 어렵다. 


http://hermeslog.tistory.com/72

'and so on > error' 카테고리의 다른 글

GetLastError 1406  (0) 2014.05.19
RegisterTaskDefinition 80070534 error  (0) 2014.03.04
F5 실행 Ctrl F5 결과 값 차이 발생  (0) 2012.12.07
[SVN] checkout 하기  (0) 2012.12.04
[LNK2001] 외부 기호를 확인할 수 없습니다.  (0) 2012.11.26

[C#] 파일 쓰기

C#은 파일 쓰기 간단하다 


using System.IO;




string MyFile = @"data.txt";

            string buf = "Hi Hello 안녕";

StreamWriter FW = File.CreateText(MyFile);

            

FW.WriteLine(buf);

            

FW.Close();


'and so on > c#' 카테고리의 다른 글

.NetFramework 설치 확인 하기  (0) 2013.01.17
C# PPT 내용 읽기  (0) 2013.01.15
c# 오피스 참조한 프로젝트 배포 시 필요한 dll  (0) 2013.01.07
c#dll c++에서 사용  (2) 2013.01.02
C++ DLL 함수 char*를 C#에서 읽어 오기  (0) 2012.09.26

함수에서 값을 반환하는 방법

함수에서 값을 반환할때 사용하는 방법은 

return 말고 또 한가지 throw 도 있다.


  1. return 사용
    -> 리턴 값이 영향을 주는 부분이 없을 때 사용 
    throw를 하면 값을 전달 하는 것으로 catch를 함수를 호출 한 부분에서 해주어야 함

    ex) int test()
    {
        int a;
        try{
                throw a;
            }
        catch(...){
                        }
    }
    test 함수 안에서 catch 하면 값 반환도 안됌 catch 안에서 return 해줘야 하는데 일을 두번함 


  2. throw 사용
    리턴 값 자체가 기능을 위해서 필요 할 때 사용
    ex) char* GetStrhig()
    -> 오류가 발생하면 null 포인터를 반환하면 되지만,
    CString GetString()일 경우 
    null 포인터를 반환하면 에러 발생한당 이럴때 throw로 에러가 발생함을 알리면 됌


'c/c++' 카테고리의 다른 글

const 과 #define  (0) 2013.01.30
구조체  (0) 2013.01.30
CAtlArray 예제  (0) 2013.01.10
IPC  (0) 2013.01.08
레지스트리  (0) 2013.01.03

.NetFramework 설치 확인 하기

각 버전별로 설치 되어있을경우 레지스트리 경로가 요기잉네?

http://support.microsoft.com/kb/318785/ko



=> 레지스트리 값을 읽어서 닷넷 프레임워크 설치 유무를 알 수 있음


-C# 버전 

http://msdn.microsoft.com/ko-kr/library/hh925568.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

ㅎㅎㅎㅎ나는 C++이 필요하다고 


/////////////////////////////////////////////////////////////////////////

4- 클라이언트 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client

4전체 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full

3.5 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5

3.0 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup

2.0 

HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727


2.0, 3.0 3.5 서비스팩과 릴리즈 

원래 릴리즈의 경로를 가지고 있고, 값도 같음 (이름 : 설치, 형식 : REG_DWORD 데이터 : 1)


1.0은 원래 릴리즈 설치 경로 같고, 값이 다름

1.1은 64비트 32비트 설치 경로 다름 

'and so on > c#' 카테고리의 다른 글

[C#] 파일 쓰기  (0) 2013.01.18
C# PPT 내용 읽기  (0) 2013.01.15
c# 오피스 참조한 프로젝트 배포 시 필요한 dll  (0) 2013.01.07
c#dll c++에서 사용  (2) 2013.01.02
C++ DLL 함수 char*를 C#에서 읽어 오기  (0) 2012.09.26

PathFindSuffixArray 경로에 찾고자 하는 문자열 있는지 확인

#include <stdio.h>

#include <Windows.h>

#include <shlwapi.h>


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



int main()

{

char lpPath[] = "c:\\Windows\\System32\\notepad.exe";

char *apszSuffix[] = {"zip", "exe", "txt"};

int nSuffixSize = sizeof(apszSuffix) / sizeof(apszSuffix[0]);

const char *lpMathedSuffix;


lpMathedSuffix = PathFindSuffixArray(lpPath, apszSuffix, nSuffixSize);


if(lpMathedSuffix != NULL)

printf("Match : %s\n", lpMathedSuffix);

else

puts("Suffix does not matched");


return 0;

}


'c/c++ > 레퍼런스' 카테고리의 다른 글

ITaskSettings interface  (0) 2014.03.04
ILogonTrigger interface  (0) 2014.03.03
Shellexecute()  (0) 2013.02.06

C# PPT 내용 읽기

          PowerPoint.Application PowerPoint_App = new PowerPoint.Application();

            PowerPoint.Presentations multi_presentations = PowerPoint_App.Presentations;

            PowerPoint.Presentation presentation = multi_presentations.Open(@"C:\test - 복사본.pptx");

           

            string presentation_text = "";

            

            for (int i = 0; i < presentation.Slides.Count; i++)

            {

                foreach (var item in presentation.Slides[i + 1].Shapes)

                {

                    var shape = (PowerPoint.Shape)item;

                    if (shape.HasTextFrame == MsoTriState.msoTrue)

                    {

                        if (shape.TextFrame.HasText == MsoTriState.msoTrue)

                        {

                            var textRange = shape.TextFrame.TextRange;

                            var text = textRange.Text;

                            presentation_text += text + " ";

                            textBox1.Text = presentation_text;

                        }

                    }

                }

            }

            PowerPoint_App.Quit();

            Console.WriteLine(presentation_text);



ppt 는 문제가 많다 

'and so on > c#' 카테고리의 다른 글

[C#] 파일 쓰기  (0) 2013.01.18
.NetFramework 설치 확인 하기  (0) 2013.01.17
c# 오피스 참조한 프로젝트 배포 시 필요한 dll  (0) 2013.01.07
c#dll c++에서 사용  (2) 2013.01.02
C++ DLL 함수 char*를 C#에서 읽어 오기  (0) 2012.09.26

CAtlArray 예제

#include <stdio.h>


#include <atlcoll.h>

#include <Windows.h>

#include <atlstr.h>


//구조체 ROW로 이루어진 배열을 만드려고 함 

struct ROW

{

int a;

int b;

ROW(int aa, int ab)

{

a = aa;

b = ab;

}


};

//이렇게

static CAtlArray <ROW> table;


int main()

{

// table 배열(ROW 구조체로 이루어진)에 아이템 추가

table.Add(ROW(1,5));


int i = table.GetCount();

printf("%d",i); // 위에 한개 Add 해주었으니 Count는 1


// 사용할때는 table의 배열로

printf("%d %d\n",table[0].a, table[0].b); 

}


CAtlArray는 동적으로 축소 및 필요에 따라 증가 한다

확장 가능

( 이거는 그러면 따로 free 안해줘도 되나 ? ㅜㅜ)



'c/c++' 카테고리의 다른 글

구조체  (0) 2013.01.30
함수에서 값을 반환하는 방법  (0) 2013.01.18
IPC  (0) 2013.01.08
레지스트리  (0) 2013.01.03
참조자 & 포인터  (0) 2012.12.18