336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

컴파일러 경고 (수준 4) C4840

variadic 함수의 인수로 서 'type' 클래스를 이식 불가능 하 게 사용 합니다.

설명

Variadic 함수에 전달 되는 클래스 또는 구조체는 일반적으로 copyable 이어야 합니다. 해당 개체를 전달할 때 컴파일러는 비트 복사본을 만들기만 하고 생성자 또는 소멸자를 호출하지 않습니다.

이 경고는 Visual Studio 2017부터 사용할 수 있습니다.

예제

다음 샘플에서는 C4840를 생성 하 고 수정 하는 방법을 보여 줍니다.

 

// C4840.cpp
// compile by using: cl /EHsc /W4 C4840.cpp
#include <stdio.h>

int main()
{
    struct S {
        S(int i) : i(i) {}
        S(const S& other) : i(other.i) {}
        operator int() { return i; }
    private:
        int i;
    } s(0);

    printf("%i\n", s); // warning C4840 : non-portable use of class 'main::S'
                       // as an argument to a variadic function
    // To correct the error, you can perform a static cast
    // to convert the object before passing it:
    printf("%i\n", static_cast<int>(s));
}

 

를 사용 하 여 작성 및 관리 되는 문자열의 경우 CStringW 제공 된를 operator LPCWSTR() 사용 하 여 CStringW 개체를 서식 문자열에 필요한 C 스타일 문자열 포인터로 캐스팅 해야 합니다.

 

CStringW str1;
    CStringW str2;
    // ...
    str1.Format("%s", static_cast<LPCWSTR>(str2));

 

MFC 시리얼 통신 클래스

Programming/C,CPP,CS 2014. 3. 8. 15:39 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

컴퓨터에서 시리얼 통신을 하려면 보통 터미널 프로그램을 사용하게 됩니다.

하지만 이 경우 용도가 매우 제한 되고 활용도가 떨어지죠.

이 시점에서 보통 Visual C++ MFC나 Visual Basic 쪽으로 눈을 돌려보게 되는데, 많은 DLL 파일들이나 프레임워크를 동반해야 되는 VB 프로젝트는 왠지 맘에 안들더군요. 

시리얼 통신 클래스는 하나 포스트해 두려고 합니다.

이 클래스는 몇년전에 인터넷 어디에서 구한 소스인데 프로젝트의 중요한 부분을 손데거나 클래스 내부에서 사용되는 변수들이 프로젝트 밖에 선언되어있는 경우가 있어서 나름 제 방식데로 수정한 버전입니다.

현재 컴퓨터에 연결된 컴포트를 검색해 주는 함수도 하나 추가했구요. 출처가 기억이 안나서 출처를 쓸 수가 없네요;; 


첨부된 Readme.txt 파일을 참고해서 사용하시면 되겠습니다. 

위 파일은 이 클래스를 이용해 만들어 본 시리얼 통신 체팅 입니다. 컴두대를 이용해서 확인해보셔도 되고, 루프백 이용해서 확인해 보셔도 됩니다. 
Visual Studio 2010 Pro 에서 컴파일 되었습니다.




출처 : http://magicom9.tistory.com/54


'Programming > C,CPP,CS' 카테고리의 다른 글

아두이노와 연계한 CPP 시리얼 통신 응용  (0) 2014.03.08
CString Convert 변환  (0) 2014.03.08
아두이노 & CPP 시리얼 통신 연동  (0) 2014.03.02
아두이노 기본 세팅  (0) 2014.03.02
CPP 연산자 오버로딩  (0) 2014.01.16