본문 바로가기

운동하는 개발자

(181)
라자루스 스레드 종료 기다리기 / lazarus wait for thread terminate 종종 특정 스레드가 확실히 종료되고 메인 프로세스가 진행되야 하는 경우가 있습니다 예를들어 버튼을 누르면 파일을 읽고 다른버튼을 누르면 파일을 쓰는 프로그램이 있다면 write하는중에 또 write명령이 오면 동일 파일 접근으로 충돌이 발생하겠죠 이럴 때 write쓰레드가 종료되길 기다릴때 사용가능합니다 //리눅스 환경 WaitForThreadTerminate(FFileWriteWorker.ThreadID, 0); //윈도우 환경 WaitForThreadTerminate(FFileWriteWorker.Handle, 0); 함수 자체는 쓰레드아이디를 넘기든 핸들을 넘기든 상관없다고 되어있는데 윈도우10 환경에선 ThreadID를 넘길경우 동작하지 않는것을 확인하였습니다
델파이 windows10 한글 깨짐 / edit 창 한글 커서 오류 (d2codingfont) ● 발생 환경 - 델파이 2010, XE5 - 윈도우7에서는 문제없으나 윈도우10으로 사용시 문제 발생 ● 현상 위와 같이 문자열을 한글로 입력시 커서가 딴데 있을때는 정상적으로 표출됨 위와같이 커서가 해당 라인에 들어가면 커서의 위치와 괄호의 위치가 비정상적으로 표시 TMI 더보기 괄호의 위치로 추측하건데 한글도 똑같이 1바이트로 계산하여 괄도 닫는곳이 한글 글자수x칸 만큼 앞으로 당겨져 보였다 ● 문제해결 결과적으로 기본 폰트의 오류 였다 Tools-> Options 를 들어가서 Editor Options->Display탭에서 Editor font를 보면 디폴트로 Courier New가 설정되어있는데 이를 변경시켜주면 된다 나는 네이버의 D2Coding폰트가 가독성이 좋다 하여 해당폰트를 다운받았다 ..
android studio AVD Waiting For Debugger / Run 무한대기 증상 안드로이드 스튜디오에서 AVD(Android Virtual Devices)를 사용하여 Run App 명령을 하였는데 Debug App을 한것처럼 멈춰있는 경우 (아래사진) 상세 내용 원래는 디버깅모드때 잠시 떴다가 사라지는 창인데 Run App을 하였는데도 무한대기하며 앱이 실행이 안됬다 Debug App을 하면 정상적으로 디버그모드로 정상적으로 동작이 된다 빠르게 Run만 해보고 싶을때 여간 불편한게 아니여서 확인해 본 결과 AVD를 디버깅중에 코드를 수정하여 다시 빌드하여 Run App을 동작시키면 간헐적으로 생기는 버그로 보였다 해결책 Tools -> AVD Manager를 실행 시킨 후 오류가 발생한 Virtual Device의 가장우측에 아래방향 화살표를 누른 뒤 'Cold Boot Now..
라자루스 dll 델파이에서 로드 / how use Lazarus dll in delphi ● 문제사항 라자루스를 이용해 만든 DLL파일이 델파이에서 LoadLibrary에서 실패하는 경우 발생 var H: THandle; // Init ... H := LoadLibrary('D:\temp\lazarus.dll'); //H의 값은 0 ● 확인사항 라자루스 프로젝트에서 DLL을 로드시 정상적으로 호출 되는것을 확인 ● 해결방안 라자루스 Project -> Project Options -> Compliler Options -> Config and Target을 보면 Target Os와 CPU가 기본적으로 디폴트로 되어있다 이를 아래와 같이 Tartget OS를 Win32, CPU를 i386으로 바꿔주니 정상적으로 로드에 성공했다 DLL을 사용하는 PC에 따라 다를꺼 같기도한데 내 피시는 윈도우10..
gitignore 자동생성 페이지 소개 https://www.toptal.com/developers/gitignore gitignore.io Create useful .gitignore files for your project www.toptal.com 위 페이지에서 gitignore를 자동생성해준다 위와같이 사용 OS, 언어, IDE를 입력해주고 [생성] 버튼 입력 위 사진과 같이 자동으로 gitignore일을 만들어준다 신규 언어나 IDE를 사용할 때 뭘 뺴야할지 잘 몰라서 통채로 다 올리는 경우가 있었는데 세상편하다
android createnewfile Operation not permitted 해결 이미지파일을 내부저장소에 저장하는 기능이 있는데 어느순간부터 File에서 createnewfile 함수 호출시 Operation not permitted 라는 에러가 발생하였다 File file = new File(fullPath, fileName); file.createNewFile(); //exception 발생부분 원래 정상 작동하던 코드인데 갑자기 안되서 당황하였고 권한 관련해서 이것도 넣어보고 빼보고 아무리 하다 해결이 안됬다가 디버깅중 이상하다 싶어 결국 해결된게 파일의 확장자가 없으면 create를 실패한다 간단하게 filename에서 확장자가 없다면 확장자를 넣어주는 로직을 추가 후 정상작동하는것을 확인하였다 구글링 대충해봤는데 확장자가 꼭 필요하다 라는말 정도만 있고 그 이유는 못찾았다 ..
delphi 각종 윈도우 경로 읽기 get windows path / SHGetSpecialFolderPath uses shlObj; SHGetSpecialFolderPath([핸들], [리턴받을 경로], [찾을 폴더명], [생성여부] 이 함수에서 찾을 폴더명(CSIDL)을 아래 링크를 참조하여 찾아보면 된다 사용 예시) function GetWindowsPath(nCSIDL): String; var P: array [0..MAX_PATH] of Char; begin if SHGetSpecialFolderPath(0, @P[0], nCSIDL, True) then Result := P else Result := ''; end; sAppdataPath := GetWindowsPath(CSIDL_APPDATA); sProgramPath := GetWindowsPath(CSIDL_PROGRAM_FILES); 위와같이 ..
델파이 DBXJSON를 이용한 json 생성 / how to make json at delphi (DBXJSON) 델파이2010에선 JSON unit이 없어서 DBXJSON을 사용하여 json을 생성하는 방법입니다 uses DBXJSON; function makejson():string; var JTopObj, JObj : TJSONObject; JArr : TJSONArray; JPair : TJSONPair; i : integer; sTemp : String; begin JTopObj := TJSONObject.Create; JArr := TJSONArray.Create; for i := 1 to 3 do begin JObj := TJSONObject.Create; JObj.AddPair(TJSONPair.Create('array_index', TJSONNumber.Create( i ))); JObj.AddPai..