솔찍히 무슨 문제가 있을지 모르겠지만

구조상으로는 CString이니까 null 로 끝나도록 하니

되도록이면 null을 추가하는건 안좋지 않을까 싶은데

msdn 문서는 안보이네


[링크 : http://stackoverflow.com/questions/5042894/is-a-cstring-always-null-terminated]

신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

cstring 'null' append 문제?  (0) 2017.05.18
MFC 시리얼 포트 관련  (0) 2017.05.17
MFC 시간측정(msec)  (0) 2017.04.18
MFC 다이얼로그 자세히(접기)  (0) 2017.04.14
mfc readfile timeout 설정  (0) 2017.04.06
mfc ccombobox 문자열 받아오기  (0) 2017.04.05
Posted by 구차니

댓글을 달아 주세요

이번에 wannacry 패치 하고나서 달라진건가..

받기만 간헐적으로 잘 안되는 것에서

보내기도 잘 안되네? ㅠㅠ


[링크 : https://msdn.microsoft.com/en-us/library/ff802693.aspx]

[링크 : http://blog.naver.com/wlgns_sjh/102660887] 번역본

[링크 : https://www.codeproject.com/Articles/8860/Non-Overlapped-Serial-Port-Communication-using-Win]


2017/04/06 - [Programming/C / Win32 / MFC] - mfc readfile timeout 설정



+

CString '0x00' append 문제 ㅠㅠ

신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

cstring 'null' append 문제?  (0) 2017.05.18
MFC 시리얼 포트 관련  (0) 2017.05.17
MFC 시간측정(msec)  (0) 2017.04.18
MFC 다이얼로그 자세히(접기)  (0) 2017.04.14
mfc readfile timeout 설정  (0) 2017.04.06
mfc ccombobox 문자열 받아오기  (0) 2017.04.05
Posted by 구차니

댓글을 달아 주세요

여러가지 함수들이 있는데 msec 단위라면 이정도로 충분할 듯

typedef long clock_t;

#define CLOCKS_PER_SEC  1000 

_Check_return_ _CRTIMP clock_t __cdecl clock(void);


[링크 : http://ohpotato.tistory.com/30]


다른건 lib 링크해주고 별별 이상한걸 include 해야 하니 귀찮...

신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

cstring 'null' append 문제?  (0) 2017.05.18
MFC 시리얼 포트 관련  (0) 2017.05.17
MFC 시간측정(msec)  (0) 2017.04.18
MFC 다이얼로그 자세히(접기)  (0) 2017.04.14
mfc readfile timeout 설정  (0) 2017.04.06
mfc ccombobox 문자열 받아오기  (0) 2017.04.05
Posted by 구차니

댓글을 달아 주세요

워드를 보면 이런 기능이 있는데





어떻게 구현하는거지? 고민을 했거늘...

결론은 이렇게 쉬운거였나...


karaofdec 11-04-01 09:28  

네...GetWindowRect로 해결 했습니다. 

아래와 같이 하니 상하 크기만 줄어드는 효과를 낼 수 있네요... 

CRect dialog_rc; 

this->GetWindowRect(dialog_rc); 

dialog_rc.bottom += 100; 

dialog_rc.right += 100; 

MoveWindow(dialog_rc); 

[링크 : http://www.tipssoft.com/bulletin/tb.php/QnA/19829]


+

다이얼로그에다가 직접 노가다로 이것저것 넣었다 뺏다 하는거 보다는

이렇게 창 크기를 변경하는게 유용할 듯?



+

생각난김에 동적 컨트롤 추가

[링크 : http://yowon009.tistory.com/418]

[링크 : http://www.tipssoft.com/bulletin/tb.php/update/804] << 요거

    [링크 : http://www.tipssoft.com/bulletin/tb.php/QnA/13289]


신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

MFC 시리얼 포트 관련  (0) 2017.05.17
MFC 시간측정(msec)  (0) 2017.04.18
MFC 다이얼로그 자세히(접기)  (0) 2017.04.14
mfc readfile timeout 설정  (0) 2017.04.06
mfc ccombobox 문자열 받아오기  (0) 2017.04.05
mfc win32 시리얼  (0) 2017.04.05
Posted by 구차니

댓글을 달아 주세요

테스트 필요


[링크 : https://www.joinc.co.kr/w/man/4200/ReadFile]

[링크 : http://stackoverflow.com/questions/4063051/possible-to-have-a-timeout-on-readfile]

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/bb540534(v=vs.85).aspx]



+

2017.04.12

timeout은 overlapped io를 설정해야만 활성화 되는건가?

[링크 : http://wwwi.tistory.com/215]

[링크 : http://goodjian.tistory.com/entry/시리얼-통신COM-포트에-읽기-쓰기-할때-타임아웃을-설정하자]

[링크 : http://jurang5.tistory.com/entry/시리얼-통신]

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/aa363437(v=vs.85).aspx]


+

음.. overlap 설정안해줘도 COMMTIMEOUTS 에서 적절한 값(?)을 해주니 문제없네..

115200bps에서 

commto.ReadIntervalTimeout = 50;

commto.ReadTotalTimeoutConstant = 50;

commto.ReadTotalTimeoutMultiplier = 10;

commto.WriteTotalTimeoutConstant = 50;

commto.WriteTotalTimeoutMultiplier = 10; 

로 설정해 주니 적당히 되는 듯

[링크  : http://blog.daum.net/pg365/51]




+

2017.04.19

115200bps 에서 이렇게 설정해도 문제가 없네.. 응답이 빨라서 가능한건가?

commto.ReadIntervalTimeout = 5;

commto.ReadTotalTimeoutConstant = 5;

commto.ReadTotalTimeoutMultiplier = 10;

commto.WriteTotalTimeoutConstant = 50;

commto.WriteTotalTimeoutMultiplier = 10; 


신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

MFC 시간측정(msec)  (0) 2017.04.18
MFC 다이얼로그 자세히(접기)  (0) 2017.04.14
mfc readfile timeout 설정  (0) 2017.04.06
mfc ccombobox 문자열 받아오기  (0) 2017.04.05
mfc win32 시리얼  (0) 2017.04.05
MFC 라디오버튼 사용하기  (0) 2017.04.05
Posted by 구차니

댓글을 달아 주세요

GetLBText() 로 해당 인덱스의 문자열을 받아올 수 있다.


[링크 : http://six605.tistory.com/250]


Gets a string from the list box of a combo box.

int GetLBText( 

   int nIndex, 

   LPTSTR lpszText  

) const;

 

void GetLBText( 

   int nIndex, 

   CString& rString  

) const; 

[링크 : https://msdn.microsoft.com/en-us/library/zcy9kze7(v=vs.110).aspx]

신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

MFC 다이얼로그 자세히(접기)  (0) 2017.04.14
mfc readfile timeout 설정  (0) 2017.04.06
mfc ccombobox 문자열 받아오기  (0) 2017.04.05
mfc win32 시리얼  (0) 2017.04.05
MFC 라디오버튼 사용하기  (0) 2017.04.05
win32 시리얼 포트 목록 얻기  (0) 2017.04.05
Posted by 구차니

댓글을 달아 주세요

귀찮아서 대충 구현했는데..

char 배열을 써야지 CString::GetBuffer(n) 으로 버퍼를 받아오니 이상해지네..


설정은 좀더 찾아 봐야겠지만, 자동으로timeout 걸리면서 최대 20자 까지 읽도록 설정이 된 것 같다.


{

CString port;

port = _T("\\\\.\\") + port;

HANDLE m_hCommPort = ::CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0/*FILE_FLAG_OVERLAPPED*/, 0);


DCB dcb = {0};

dcb.DCBlength = sizeof(DCB);


if (!::GetCommState (m_hCommPort,&dcb))

{

TRACE ("CSerialCommHelper : Failed to Get Comm State Reason: %d",

  GetLastError());

return E_FAIL;

}

dcb.BaudRate    = 115200

dcb.ByteSize    = 8;

dcb.Parity      = 0;

dcb.StopBits    = ONESTOPBIT;

if (!::SetCommState (m_hCommPort,&dcb))

{

ASSERT(0);

TRACE ( "CSerialCommHelper : Failed to Set Comm State Reason: %d",

GetLastError());

return E_FAIL;

}


CString hex_query="ffeeddccbbaa00";

DWORD iolen;

int iRet = WriteFile (m_hCommPort, hex_query, hex_query.GetLength(),&iolen ,NULL);


char temp[20];

int abRet = ReadFile(m_hCommPort, &temp ,20, &iolen, NULL) ;

temp[iolen] = '0x00';


CloseHandle(m_hCommPort);

return 0;



[링크 : http://blog.daum.net/chowood/8039404]

    [링크 : http://forum.falinux.com/zbxe/index.php?document_srl=572257]

    [링크 : http://forum.falinux.com/zbxe/index.php?document_srl=572404]

    [링크 : http://forum.falinux.com/zbxe/index.php?document_srl=572588]

    [링크 : http://forum.falinux.com/zbxe/index.php?document_srl=572862]

[링크 : https://www.codeproject.com/Articles/2682/Serial-Communication-in-Windows]

신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

mfc readfile timeout 설정  (0) 2017.04.06
mfc ccombobox 문자열 받아오기  (0) 2017.04.05
mfc win32 시리얼  (0) 2017.04.05
MFC 라디오버튼 사용하기  (0) 2017.04.05
win32 시리얼 포트 목록 얻기  (0) 2017.04.05
mfc CreateFile com10 이상 열기  (0) 2017.04.04
Posted by 구차니

댓글을 달아 주세요

MFC 에서 쓸려면

Group을 설정해야 하는데

여러개를 묶을때 처음 녀석을 Group True로 설정

그리고 나머지는 False로 하고

가장 처음 Group True로 된 녀석에게 변수를 추가해주는데

대개는 DDX 사용하도록 권장하는 듯

[링크 : http://armcc.tistory.com/67]


수작업(!)으로 하려면

라디오 버튼은 CButton을 사용하기 때문에

GetCheckedRadioButton(first, last); 메소드를 이용해서 체크된 녀석의 ID를 받아오거나

[링크 : http://toring92.tistory.com/137]


여러개의 그룹을 수작업으로

((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck() 이런식으로 일일이 체크해야 할 듯 하다.

[링크 : http://stackoverflow.com/questions/1165619/mfc-radio-buttons-ddx-radio-and-ddx-control-behavior]

신고

'Programming > C / Win32 / MFC' 카테고리의 다른 글

mfc ccombobox 문자열 받아오기  (0) 2017.04.05
mfc win32 시리얼  (0) 2017.04.05
MFC 라디오버튼 사용하기  (0) 2017.04.05
win32 시리얼 포트 목록 얻기  (0) 2017.04.05
mfc CreateFile com10 이상 열기  (0) 2017.04.04
bit field와 컴파일러별 byte align  (0) 2017.03.27
Posted by 구차니

댓글을 달아 주세요

c#이나 .net framework을 쓰면 간편한데

win32로는 영 복잡할수 밖에 없는 듯?


그런데 QueryDosDevice()를 쓰면 0ms 라는데

  1. CreateFile("COM" + 1->255) as suggested by Wael Dalloul
    ✔ Found com0com ports, took 234ms.

  2. QueryDosDevice()
    ✔ Found com0com ports, took 0ms.

  3. GetDefaultCommConfig("COM" + 1->255)
    ✔ Found com0com ports, took 235ms.

  4. "SetupAPI1" using calls to SETUPAPI.DLL
    ✔ Found com0com ports, also reported "friendly names", took 15ms.

  5. "SetupAPI2" using calls to SETUPAPI.DLL
    ✘ Did not find com0com ports, reported "friendly names", took 32ms.

  6. EnumPorts()
    ✘ Reported some non-COM ports, did not find com0com ports, took 15ms.

  7. Using WMI calls
    ✔ Found com0com ports, also reported "friendly names", took 47ms.

  8. COM Database using calls to MSPORTS.DLL
    ✔/✘ Reported some non-COM ports, found com0com ports, took 16ms.

  9. Iterate over registry key HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
    ✔ Found com0com ports, took 0ms. This is apparently what SysInternals PortMon uses.

[링크 : http://stackoverflow.com/.../how-do-i-get-a-list-of-available-serial-ports-in-win32]


m_MyPort 변수만 다른걸로 바꿔써주면 잘 작동 하는 듯

단, unicode 기반에서는 (LPSTR)대신 (LPWSTR)로 해주어야 에러가 나지 않는다.

void SelectComPort() //added function to find the present serial 
{

    TCHAR lpTargetPath[5000]; // buffer to store the path of the COMPORTS
    DWORD test;
    bool gotPort=0; // in case the port is not found

    for(int i=0; i<255; i++) // checking ports from COM0 to COM255
    {
        CString str;
        str.Format(_T("%d"),i);
        CString ComName=CString("COM") + CString(str); // converting to COM0, COM1, COM2

        test = QueryDosDevice(ComName, (LPSTR)lpTargetPath, 5000);

            // Test the return value and error if any
        if(test!=0) //QueryDosDevice returns zero if it didn't find an object
        {
            m_MyPort.AddString((CString)ComName); // add to the ComboBox
            gotPort=1; // found port
        }

        if(::GetLastError()==ERROR_INSUFFICIENT_BUFFER)
        {
            lpTargetPath[10000]; // in case the buffer got filled, increase size of the buffer.
            continue;
        }

    }

    if(!gotPort) // if not port
    m_MyPort.AddString((CString)"No Active Ports Found"); // to display error message incase no ports found

}


[링크 : http://stackoverflow.com/.../what-is-proper-way-to-detect-all-available-serial-ports-on-windows]

신고
Posted by 구차니

댓글을 달아 주세요

시리얼포트 10번 이후 열기라는 글이 있어서 보니


버그가 있어서 COM9 까진 그냥 여는데, 그 이후에는

\\.\COM%d 식으로 표현을 해야 하는데 escape 문자를 넣어주어야 하니 이렇게 미친듯이 길어진다.


hPort = CreateFile("\\\\.\\COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); 

[링크 : http://stackoverflow.com/questions/11775185/open-a-com-port-in-c-with-number-higher-that-9]

신고
Posted by 구차니

댓글을 달아 주세요