기록으로 남기기 위해서.

int value = 300;

int usedStorage = 9267822;//단위 MB

int totalStorage = 29284517;//단위 MB

MVS2015 / QT5에서 하기 수식을 수행하면,

int result = ceil(value * usedStorage / totalStorage);// ERROR : -51

원하는 result를 얻으려면,

각각을 일정 값 이하로 줄인 다음에 비율을 구한다.

int temp_value = usedStorage / 1024;

int temp_storage = totalStorage / 1024;

result = ceil(value * temp_value / temp_storage);//8 !!!!!

by 무위자연 2019.07.04 14:22


함수 선언을..

void error(char const *msg, bool showKind = true, bool exit);

이런 식으로 하면 다음과 같은 애러가 뜨게 된다.

default argument not at end of parameter list


이것의 의미는 끝에 기본 값을 안 줬다 이며 이것을 해결하기 위해서는

끝에서부터 기본값을 주기 시작해야 한다는 의미이다.

exit도 기본 값을 주던지 아니면 showKind를 제일 뒤로 보내야 한다~


더 자세한 설명은 https://stackoverflow.com/questions/5637679/default-argument-in-the-middle-of-parameter-list 

by 무위자연 2018.09.20 12:29

1. NSIS 패키지를 설치한다.a.     (https://sourceforge.net/projects/nsis/files/NSIS%202/2.46/ 다운)

 + 참고 : http://www.dongwun.com/tc/197


2.NSIS를 편집/컴파일할 수 있는 Edit를 설치한다.( http://hmne.sourceforge.net/ 다운)


trouble

1. 하기 설치시에 설치폴더 전체의 파일을 복사하는 옵션이 있음

Section -MainProgram

${INSTALL_TYPE}

SetOverwrite ifnewer

SetOutPath "$INSTDIR"

File /r "${CURRENT_PATH}\${DIRECTORY_NAME}\*"


SectionEnd


/r이 재귀적 호출을 의미하고 없으면 해당 폴더만 복사한다. 만일 /r을 쓰지 않고도 하위 폴더를 쓸려면 각각 폴더를 다 따로 지정해서 "File"이란 명령어로 복사해야 한다.

by 무위자연 2016.11.08 09:25
등록
sc create [서비스명] binPath = 경로 start= auto

> start는 수동과 자동을 정하는 것이며 기본은 수동이다.

삭제
sc delete [서비스 명]

서비스 실행
sc start [서비스명]

서비스 상태를 보려면

sc query [서비스명]

예외 처리
- 삭제한 다음에 다시 등록할려고 할 때 1072 애러가 뜬다면?
모든 사용자를 로그오프한 다음에 등록하면 된다.


by 무위자연 2016.07.11 16:15


MFC는 빌드 환경에 따라서 재배포 패키지가 필요하다

Microsoft Visual C++ Redistributable


VS에서 지정한 버전의 컴파일러로 빌드하면

그에 상응하는 재배포 패키지가 있어야 실행이 된다.


그러므로 사용하는 프로젝트의 빌드가 사용하는 재배포 패키지를 포함시켜서

실행의 안정성을 확보하는 것이 좋다.


예를 들어 VS2013에서 빌드한 프로젝트가 Windows 7 혹은 XP에서는 실행 안될 확율이 높다.

그럴 때는 2013 재배포 패키지를 설치하게 한다.

Microsoft Visual C++ Redistributable 2013



프로젝트 초기화 부분에서 다음 코드를 넣는다.


DWORD dwType = REG_SZ;

DWORD dwSize = 128;

HKEY hKey;

TCHAR szBuffer[128] = { '\0', };

LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{F8CFEB22-A2E7-3971-9EDA-4B11EDEFC185}", 0, KEY_READ, &hKey);

if (ERROR_SUCCESS != lResult)

{

AfxMessageBox("재배포 패키지를 설치하겠습니다.");

WinExec("vcredist_x86.exe /qb!", SW_SHOW);

AfxMessageBox("설치 완료");

// xp에선 설치완료후 정확하게 뜨지만 Windows7에선 완료되지 않았는데 뜬다.

}

else

{

//AfxMessageBox("이미 설치됨");

}


본인이 재배포할 패키지의 product code는 다음 링크를 참고 하면 된다.

재배포패키지 product code list

by 무위자연 2016.06.30 12:04

MFC에 클래스를 추가하고

해당 클래스 로직에서 SetTimer / KillTimer를 사용할 경우에

릴리스 모드(Release)모드에서는 애러가 나지 않으나 정상 동작 하지 않고

디버그 모드(Debug)모드에서는 하기와 같이 애러가 날 때가 있다.


---------------------------

Microsoft Visual C++ Runtime Library

---------------------------

Debug Assertion Failed!


Program: ...r\Documents\º´¿ø¿ëÇ÷´ç±â\trunk\DMTool.N\Debug\iCE DM Tool.exe

File: f:\dd\vctools\vc7libs\ship\atlmfc\include\afxwin2.inl

Line: 152


For information on how your program can cause an assertion

failure, see the Visual C++ documentation on asserts.


(Press Retry to debug the application)


---------------------------

중단(A)   다시 시도(R)   무시(I)   

---------------------------

빌드시에 warning도 안 나고 error도 없는 상태라 사람 환장하게 한다.

그렇다고 ontimer 이벤트 내에서 뭔가가 일어나기도 전에 이미 경고가 뜬다.

구글 검색해보면 윈도우가 없어서 발생하는 것이라고 나온다.

그 의미를 몰랐는데.

MFC에서는 윈도우가 없다는 것의 의미는 윈도우에 UI component와 연결되어 있지 않다는 의미인 것이다.

그래서 해당 클래스를 UI Component 아무거나 상속 받은 다음에 하기와 같이 연결해준 상태에서 사용하면 된다.

ex
사용할 클래스 선언.

class CHIDCOM : public CEdit

Dlg 클래스에서의 추가
.h에서
CHIDCOM m_hidCom;

.cpp에서
DDX_Control(pDX, IDC_EDIT_HID, m_hidCom);


by 무위자연 2016.01.26 14:18

사용할려는 클래스에선 상관 없는 애러가


CDiaolog를 상속 받는 include 당하는 클래스에서 다음과 같은 애러가 난다.


개 짜증.

trunk\dmtool.n\dmtool\DMToolDlg.h(24): error C2065: 'IDD_DMTOOL_DIALOG' : undeclared identifier


이런식으로....


이럴 때는 resource.h를 넣어서 간단하게 해결!!


도움 받은 포스팅은 다음과 같습니다.!!! 


http://acebluebird.tistory.com/entry/%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%EC%B6%94%EA%B0%80%EC%8B%9C-%EC%9D%B4%EC%9C%A0%EC%97%86%EB%8A%94-error-C2065-error-C2057-%EB%A9%94%EC%8B%9C%EC%A7%80-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95

by 무위자연 2016.01.22 09:53

8 비트 중에서 상위 3비트를 쓴다는 것의 의미는


3비트로 쓰는 값을 바이너리로 바꿔서 특정 8비트의 1,2,3번으로 쓴다는 것을 의미한다.


즉 8비트를 바이너리로 바꿔고 1,2,3 까지의 값을 가지고 int  혹은 다른 char으로 바꾸면 된다.




반대로 상위 3비트를 채울려면. 


바이너리를 기준으로 하므로 상위 3비트 값을 바꿀려면 특정 값에서 2^4을 곱한 값으로 8비트 값을 계산해서 넣어주면 된다.


또 특정 int 값을 2개 바이트로 나눈다고 하면. 다음과 같이 한 바이트는 상위 바이트를, 한 바이트는 하위  바이트를 담당하게 된다.

ex)

int count = 555

char dat25 = count / 16 / 16;

int remain = count - (dat25 * 16 * 16);

char dat26 = remain;



> 두서 없으니 다시 보면 좋아지겠지.

by 무위자연 2015.10.28 16:54

go lang에서는 {}로 묶을 때 줄 바꿈을 하면 다음과 같은 애러가 나온다.


잘못된 예.

if usersummary.Cloud == "asc" 
 {

       //sqlQuery += " and cloud not like %" + usersummary.Cloud + "%"

 }

users\users.go:4879: missing condition in if statement

users\users.go:4879: usersummary.Cloud == "asc" evaluated but not used

정상적인 예

if usersummary.Cloud == "asc" {
                //sqlQuery += " and cloud not like %" + usersummary.Cloud + "%"

            }


by 무위자연 2015.06.19 12:11

Installshield(IS)가 windows only 라면


installanywhere(IA) 는 multi platform을 지원하는 패키지이다.


그런데 근자에 봉착한 문제는 패키지를 설치하면서 각종 sub로 실행되어야 하는 스크립트를 


installanywhere(IA)에서 해야 하는 문제였다.


많은 동작들이 있을수 있다.


파일 복사 / 폴더 확인 / 다른 실행 파일 실행(예를 들어 드라이버 등) installshield(IS)는 비교적 많은 자료가 있지만


installanywhere(IA)는 자료가 별로 없다.


가장 하고 싶었던 동작은 installshield(IS)에서의 launchappandwait였다 


그래서 내가 한 방법은 


Top menu에서 "Sequence"  > "Add action" > "Execute Command"를 추가하고


하단에 보면 설정할 수 있다. 


이때 batch 파일을 만들어서 실행시키거나 "exe"를 실행시키면 된다


옵션을 "Suspent installation until process complete"을 선택하면 원하는 동작이 마칠때까지 installanywhere(IA)는 대기하며


"Show indeterminate dialog"하면 해당 작업이 수행됨을 대기하고 잇는 다이얼로그가 뜨게 된다,


해당 배치가 실행됨은 installanywhere(IA) 하단 분에 메세지를 확인하면 된다.


주의 할 것은 설치된 폴더에 해당 배치 파일이나 exe 파일이 있는지 혹은 환경변수에 의한 동작인지 확인해야 하며


설치된 폴더에 같이 있는 파일의 경우에 CMD /C "$USER_INSTALL_DIR$$/$CDM20828_Setup.exe" 같이 넣어줘야 한다.


주석(comment) 내가 사용한 환경은 Installanywhere 2013 version 임을 밝혀둔다.

by 무위자연 2015.04.10 17:58
| 1 2 3 |