라이브러리 프로젝트의 경우 빌드 후 이벤트에 batch 파일을 등록해서 참조용 헤더 파일을 복사하도록 설정하는 경우가 많다. 그런데 문제는, 해당 라이브러리를 쓰도록 설정한 프로젝트에서 값을 변경하다 보면, 실수로 ‘복사된 헤더파일’의 코드를 변경해서 변경사항이 적용되지 않는 불상사가 종종 발생한다. 이 문제를 방지하기 위해서 파일들을 읽기 전용으로 복사하는 편이 좋다. 참고용 코드 :: *.h, 파일 복사(라이브러리 참조용) xcopy /d /s /y /i /r ".\Project\DirectXTex\DirectXTex.h" ".\External\Include\DirectXTex\" ::헤더 파일 읽기 전용으로 변경 attrib +r ".\External\Include\DirectXTex\*.h" xc..
관리자 권한으로 실행하는 이유? 관리자 권한으로 실행하지 않으면 관리자 권한으로 실행되는 프로그램에서는 오토핫키 기능이 작동하지 않거나 이상하게 작동한다. 시작 프로그램으로는 관리자 권한으로 실행되도록 설정할 수가 없지만, '작업 스케줄러' 라는 기능을 활용하여 윈도우 시작시마다 관리자 권한으로 오토핫키 스크립트가 실행되도록 할 수 있다. 빅스비 루틴이나 애플의 단축어 자동화 기능과 비슷한 기능을 활용하는 것임. 1. 작업 스케줄러 열기 윈도우 + R 키로 실행창을 연 뒤 taskschd.msc 입력 후 실행 2. 작업 만들기를 눌러 새 작업 만들기 3. 일반 탭 : 이름, 설명 설정 + 관리자 권한으로 실행되도록 설정 나중에도 알아볼수 있도록 이름과 설명을 입맛대로 설정해 주고 '가장 높은 수준의 권한..
※ 오토핫키에 대해 깊이 알고있는 것이 아니라 단순 키변경 정도만 아는 수준입니다. 더 좋은 방법이 있을 수 있습니다. 1. 오토핫키 2.0 설치 https://www.autohotkey.com/ 2. 프로그램을 실행한 뒤 'new script' 로 새 스크립트 파일 생성 3. 생성된 스크립트 파일을 메모장 등으로 열어주기 4. 다음의 코드를 추가한 후 저장. SetCapsLockState("AlwaysOff") PgUp::Return PgDn::Return RShift & u::{ if(GetKeyState("LShift")) SendInput("^+{Up}") else SendInput("{Up}") Return } RShift & j::{ if(GetKeyState("LShift")) SendInp..
1. Windows+R 키조합에서 regedit 입력 후 확인. 레지스트리 편집기 창이 열린다. 2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 해당 경로로 이동. Keyboard Layouts가 아니라 Keyboard Layout 이다. 주의할 것 3. 우측 창 우클릭 → 새로 만들기 → 이진값 → 이름을 'Scancode Map'으로 변경 4. 생성한 레지스트리를 더블클릭. 값 수정 창이 나오는데 어려워할것 없다. 한 줄당 숫자 한 쌍이 8자리가 있다고 생각하자. 각각 1번째 자리 ~ 8번째 자리 라고 생각해준다. 일단 첫번째 줄은 무조건 모두 0이다. '00'을 8번 쳐주면 된다. 5. 두번쨰 줄의 첫 1번째 자리에는 '..
며칠 전부터 캡스락 키가 사용량에 비해 너무 입지가 좋다는 생각이 들어서 옮기기로 마음먹었다. 강남 노른자땅에서 농사짓는 느낌? 그 과정에서 생긴 문제점들과 설정 방법을 나중에 컴퓨터를 바꿔도 쓸 수 있도록 기록을 남겨놓으려고 한다. 1. 바꾸게 된 이유 + 최종 설정 처음에는 단순히 캡스락 버튼과 컨트롤 버튼을 스왑하는 선에서 그치려고 했었지만, 내 기준으로는 컨트롤 버튼을 누르려고 손목이 꺾이는 빈도보다 오른손이 방향키나 백스페이스를 누르기 위해 손목이 꺾이는 빈도가 훨씬 많다고 생각되어 최종적으로는 좀 다른 방법으로 설정하게 되었다. 최종적으로는... 컨트롤 버튼은 그대로 사용 레지스트리를 통해 캡스락 버튼을 누르면 RSHIFT 버튼이 눌리도록 설정 오토핫키를 통해 아래의 키 조합 및 기능을 설정 ..
|| 연산자(OR)의 특징은 논리검사 대상 중 하나라도 true가 반환될 경우 true를 반환한다. 그리고 || 연산자의 결합 방향은 →(오른쪽) 방향이다. 그렇다면 아마 C++에서는 최적화를 위해서 왼쪽 파트의 논리 검사에서 true가 반환된다면 오른쪽 파트는 검사를 스킵하지 않을까? 라는 의문이 들었다. 바로 실험해보자 #include #include int main() { std::vector vecIntPtr; vecIntPtr[0] = 1; return 0; } 우선 위의 코드를 실행 시키면 vecIntPtr에는 원소가 하나도 추가되지 않았으므로 0번 인덱스를 강제로 참조하게 되면 아래와 같은 에러가 발생한다. 또한 std::vector의 empty() 함수는 생성한 벡터 컨테이너가 비어있을 경..
이글에선 초보도 일단 해볼수 있도록 간단한 사용 방법만 설명. 원리는 구글링하면 설명 잘해주는글 수두룩하므로 그걸 볼것. —이론— 정적 링크 라이브러리는 컴파일 시 코드가 연결된 프로그램에 합쳐진다. 소스코드 + (라이브러리 헤더 파일) + lib → exe 동적 링크 라이브러리는 컴파일 시 연결된 프로그램에 합쳐지지 않는다.→ dll과 연결된 함수 주소만 프로그램에 합쳐놓고, 자세한 내용은 dll에서 참조해서 사용하는 방식 쉽게 생각해서 주소록만 등록시켜놓고 사용하는 방식이라고 보면 될것 같다. 소스코드 + (라이브러리 헤더 파일) + lib → exe + dll —실전— 1. 라이브러리용 프로젝트 만들기 1. 빈 프로젝트 하나 생성 2. 이렇게 헤더와 소스파일을 각각 하나씩 만들어준다. 3. 동적 링..
이글에선 초보도 일단 해볼수 있도록 간단한 사용 방법만 설명. 원리는 구글링하면 설명 잘해주는글 수두룩하므로 그걸 볼것. —이론— 정적 링크 라이브러리는 컴파일 시 코드가 연결된 프로그램에 합쳐진다. 소스코드 + (라이브러리 헤더 파일) + lib → exe 동적 링크 라이브러리는 컴파일 시 연결된 프로그램에 합쳐지지 않는다.→ dll과 연결된 함수 주소만 프로그램에 합쳐놓고, 자세한 내용은 dll에서 참조해서 사용하는 방식 쉽게 생각해서 주소록만 등록시켜놓고 사용하는 방식이라고 보면 될것 같다. 소스코드 + (라이브러리 헤더 파일) + lib → exe + dll —실전— 1. 라이브러리용 프로젝트 만들기 1. 빈 프로젝트 하나 생성 2. 이렇게 헤더와 소스파일을 각각 하나씩 만들어준다. 3. 헤더 파..
스타크래프트 게임 모작 등으로 스프라이트 데이터를 추출하고자 하는 분들을 위해 작성합니다. 1. 준비물스타크래프트 게임 내부의 다음 3개 파일리마스터는 추출이 불가능하므로 구버전 설치 또는 립버전에서 뽑아오면 된다. Total Commander 프로그램 설치https://www.ghisler.com/ Total Commander mpq 플러그인 다운로드https://totalcmd.net/plugring/mpq.html PyMS 다운로드https://github.com/poiuyqwert/PyMS#installation 2. Total Commander로 mpq파일 압축 풀기Total Commander를 설치했으면 다운받은 mpq 플러그인(wcx_mpq) 파일의 압축을 풀어준다. mpq.wcx 파일과 L..
우리는 이를 여러 개의 헤더 파일과 cpp 파일로 분리하여 클래스 형태로 쪼개서 프로그래밍한다. 순차적 프로그래밍으로 main.cpp에 모든 코드를 떄려박는 것은 가독성이나, 코드 유지보수 면에서 매우 비효율적이기 때문이다. 하지만 이런 식으로 프로그래밍을 할 경우 컴파일 때 문제가 생긴다. 순차적 프로그래밍에서는 이것저것 확인할 필요 없이 코드 순서대로 컴파일을 해나가면 되지만, 객체 지향 프로그래밍에서는 한 클래스에서 이것저것 참조하는 데이터가 생기므로 여기저기 왔다갔다 하면서 컴파일해야 하기 때문이다. 사람의 가독성은 올라갔지만 컴파일 시의 가독성은 떨어졌다고 볼 수 있겠다. 당연히 이건 프로그램이 빌드되는 걸 지루하게 기다리는 나에게만 해당되는 내용이 아니었다. 많은 개발자들이 컴파일 속도를 올리..