MFC 프로젝트에서 ATL 연동하기

Programming/COM,ATL 2016. 3. 29. 11:44 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC 프로젝트에서 ATL 연동하기


작업 환경 : VS2013


일반 MFC 프로젝트를 만듭니다.




2. 대화 상자 기반



ActiveX 컨트롤 체크 확인



만들어진 다이얼로그에서 ActiveX 컨트롤 추가



추가하면 하얀 네모가 다이얼로그에 추가된다.



ActiveX 컨트롤을 클릭한다음 우클릭하여 속성이 뜨고 번개모양 아이콘을 누르면 연결된 이벤트들이 확인된다.



ATL 의 Property 와 Method 는 ActiveX 컨트롤 멤버변수 추가하여서 사용이 가능하다.



예제로는 Ctrl 이라는 멤버 변수를 추가하였다.

다음과 같이 h, cpp 파일이 만들어진다.



내부에는 ATL 에서 구현한 Property 와 Method 가 보인다.



ActiveX 컨트롤에서 이벤트 처리 함수를 추가하였다.



이제 Ctrl 의 Property 와 Method 를 불러올 수 있다.



Android Studio 1.4 and OpenCV 3.0.0 연동

Programming/Android 2015. 12. 19. 02:39 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Android Studio 1.4 and OpenCV 3.0.0 연동


Android Studio 1.4


https://dl.google.com/dl/android/studio/install/1.4.0.10/android-studio-bundle-141.2288178-windows.exe


OpenCV_Java_AndroidStudio

https://github.com/quanhua92/OpenCV_Java_AndroidStudio



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

아두이노 & CPP 연동


출처 : http://playground.arduino.cc/Interfacing/CPPWindows#.UxLbvuN_uSo




SerialClass.h

#ifndef SERIALCLASS_H_INCLUDED
#define SERIALCLASS_H_INCLUDED

#define ARDUINO_WAIT_TIME 2000

#include 
#include 
#include 

class Serial
{
    private:
        //Serial comm handler
        HANDLE hSerial;
        //Connection status
        bool connected;
        //Get various information about the connection
        COMSTAT status;
        //Keep track of last error
        DWORD errors;

    public:
        //Initialize Serial communication with the given COM port
        Serial(char *portName);
        //Close the connection
        //NOTA: for some reason you can't connect again before exiting
        //the program and running it again
        ~Serial();
        //Read data in a buffer, if nbChar is greater than the
        //maximum number of bytes available, it will return only the
        //bytes available. The function return -1 when nothing could
        //be read, the number of bytes actually read.
        int ReadData(char *buffer, unsigned int nbChar);
        //Writes data from a buffer through the Serial connection
        //return true on success.
        bool WriteData(char *buffer, unsigned int nbChar);
        //Check if we are actually connected
        bool IsConnected();


};

#endif // SERIALCLASS_H_INCLUDED
SerialClass.cpp
#include "SerialClass.h"

Serial::Serial(char *portName)
{
    //We're not yet connected
    this->connected = false;

    //Try to connect to the given port throuh CreateFile
    this->hSerial = CreateFile(portName,
            GENERIC_READ ,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

    //Check if the connection was successfull
    if(this->hSerial==INVALID_HANDLE_VALUE)
    {
        //If not success full display an Error
        if(GetLastError()==ERROR_FILE_NOT_FOUND){

            //Print Error if neccessary
            printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName);

        }
        else
        {
            printf("ERROR!!!");
        }
    }
    else
    {
        //If connected we try to set the comm parameters
        DCB dcbSerialParams = {0};

        //Try to get the current
        if (!GetCommState(this->hSerial, &dcbSerialParams))
        {
            //If impossible, show an error
            printf("failed to get current serial parameters!");
        }
        else
        {
            //Define serial connection parameters for the arduino board
            dcbSerialParams.BaudRate=CBR_9600;
            dcbSerialParams.ByteSize=8;
            dcbSerialParams.StopBits=ONESTOPBIT;
            dcbSerialParams.Parity=NOPARITY;

             //Set the parameters and check for their proper application
             if(!SetCommState(hSerial, &dcbSerialParams))
             {
                printf("ALERT: Could not set Serial Port parameters");
             }
             else
             {
                 //If everything went fine we're connected
                 this->connected = true;
                 //We wait 2s as the arduino board will be reseting
                 Sleep(ARDUINO_WAIT_TIME);
             }
        }
    }

}

Serial::~Serial()
{
    //Check if we are connected before trying to disconnect
    if(this->connected)
    {
        //We're no longer connected
        this->connected = false;
        //Close the serial handler
        CloseHandle(this->hSerial);
    }
}

int Serial::ReadData(char *buffer, unsigned int nbChar)
{
    //Number of bytes we'll have read
    DWORD bytesRead;
    //Number of bytes we'll really ask to read
    unsigned int toRead;

    //Use the ClearCommError function to get status info on the Serial port
    ClearCommError(this->hSerial, &this->errors, &this->status);

    //Check if there is something to read
    if(this->status.cbInQue>0)
    {
        //If there is we check if there is enough data to read the required number
        //of characters, if not we'll read only the available characters to prevent
        //locking of the application.
        if(this->status.cbInQue>nbChar)
        {
            toRead = nbChar;
        }
        else
        {
            toRead = this->status.cbInQue;
        }

        //Try to read the require number of chars, and return the number of read bytes on success
        if(ReadFile(this->hSerial, buffer, toRead, &bytesRead, NULL) && bytesRead != 0)
        {
            return bytesRead;
        }

    }

    //If nothing has been read, or that an error was detected return -1
    return -1;

}


bool Serial::WriteData(char *buffer, unsigned int nbChar)
{
    DWORD bytesSend;

    //Try to write the buffer on the Serial port
    if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0))
    {
        //In case it don't work get comm error and return false
        ClearCommError(this->hSerial, &this->errors, &this->status);

        return false;
    }
    else
        return true;
}

bool Serial::IsConnected()
{
    //Simply return the connection status
    return this->connected;
}
main.cpp
#include 
#include 
#include "SerialClass.h"	// Library described above
#include 

// application reads from the specified serial port and reports the collected data
int main(int argc, _TCHAR* argv[])
{
	printf("Welcome to the serial test app!\n\n");

	Serial* SP = new Serial("\\\\.\\COM3");    // adjust as needed

	if (SP->IsConnected())
		printf("We're connected");

	char incomingData[256] = "";			// don't forget to pre-allocate memory
	//printf("%s\n",incomingData);
	int dataLength = 256;
	int readResult = 0;
	FILE *f;
	f = fopen("TempData.txt","w");

	while(SP->IsConnected())
	{
		readResult = SP->ReadData(incomingData,dataLength);
		//		printf("Bytes read: (-1 means no data available) %i\n",readResult);

		std::string test(incomingData);

		printf("%s",incomingData);

		char* token = strtok(incomingData, " ");
		while (token!=NULL) {
			fprintf(f,"\t%s",token);
			token = strtok(NULL, " ");
		}
		
		// strtok // token
		test = "";

		Sleep(1000);
	}
	fclose(f);
	return 0;
}

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

CString Convert 변환  (0) 2014.03.08
MFC 시리얼 통신 클래스  (0) 2014.03.08
아두이노 기본 세팅  (0) 2014.03.02
CPP 연산자 오버로딩  (0) 2014.01.16
CPP 연산자 오버로딩  (0) 2014.01.16