본문 바로가기

운동하는 개발자/Lazarus

(7)
lazarus dcpcrypt 암호화 오작동 (use external debug symbols file) 소스 merge후부터 http 통신이 100%실패하는 문제가 있었다 서버측에서 확인해보니 복호화 후 데이터가 비정상적이였으며 결론적으론 암호화에 실패한것이다 (별도로 에러가 발생하지도 않았다..) merge할 때 놓친 코드가 있나 몇번을 다시 찾아봐도 찾을 수 없었고 전문 생성시 잘못된것이 있나 로그를 엄청나게 추가해봐도 특이점이 없었다 그럼 정상작동하는 프로젝트와 프로젝트 옵션을 하나하나 비교해보는데.. 최근 merge작업 후 각각의 프로젝트가 다른 모드에서 빌드되도록 빌드모드를 추가했었다 project->project options->compiler Options에서 추가하였는데 이때 단순히 +버튼을 눌러 추가 생성하면 기존 설정을 복사해와 추가 생성되는데 'Create Debug and Releas..
라자루스 스레드 종료 기다리기 / lazarus wait for thread terminate 종종 특정 스레드가 확실히 종료되고 메인 프로세스가 진행되야 하는 경우가 있습니다 예를들어 버튼을 누르면 파일을 읽고 다른버튼을 누르면 파일을 쓰는 프로그램이 있다면 write하는중에 또 write명령이 오면 동일 파일 접근으로 충돌이 발생하겠죠 이럴 때 write쓰레드가 종료되길 기다릴때 사용가능합니다 //리눅스 환경 WaitForThreadTerminate(FFileWriteWorker.ThreadID, 0); //윈도우 환경 WaitForThreadTerminate(FFileWriteWorker.Handle, 0); 함수 자체는 쓰레드아이디를 넘기든 핸들을 넘기든 상관없다고 되어있는데 윈도우10 환경에선 ThreadID를 넘길경우 동작하지 않는것을 확인하였습니다
라자루스 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..
라자루스에서 string array 를 JNI로 java에게 넘기기 / how to passed LAZARUS String Array to JNI for android 지난번 Lazarus(free pascal)로 생성한 so파일을 안드로이드에 연동하는법을 배워보았습니다 그 예제에서는 int값만 주고 받았는데 이게 주고받는게 단순하지 않은 타입들이 있습니다 그 문제는 흔히 사용하는 string에서부터 시작됩니다 우선 java의 String은 유니코드로 저장되는 char 배열이기에 lazarus String으로 쓰기위해선 UTF- 8로 인코딩을 해줘야한다 java에서 넘어온 string값 변환(JNI -> Lazarus) var jsTemp : JString; sTemp : String; begin sTemp := JStringTostring(jsTemp); end; function JStringToString(AJString: jstring): string; var E..
라자루스(프리파스칼) 로 안드로이드에 사용 될 so파일 생성 / how to make .so for android to LAZARUS(freepascal) / fpcupdeluxe 설치 - 1 Lazarus(Freepacal)를 이용하여 안드로이드 native library인 .so파일을 Cross Compile 하여 생성 해보자 1. 우선 크로스컴파일을 가능하게 해주는 fpcupdeluxe라는 프로그램을 다운받아야 한다 1-1) fpcupdeluxe다운 좌측링크를 누른 뒤 Latest release를 눌러 깃헙에서 자신의 os와 cpu에 맞는 설치파일을 다운로드받는다 1-2) FPC를 설치해주는데 라자루스가 이미 설치되어있다면 원하는 버전의 FPC를 선택해서 FPC Only를 누르면 해당경로에 설치된다 가장 최신버전을 이용하자 1-3) 두번째탭 cross 화면이며 필자는 이미 크로스컴파일러가 설치 되어있기에 found crosscompiler for x86_64 등의 메세지가 표출된다 여기서..
라자루스 빌드 옵션 선택방법 / lazarus build Custom options 한 프로젝트에서 빌드 옵션에 따라 다른 로직을 타게 하고 싶은 경우 {$IFDEF TEST_MODE} //테스트동작 {$ELSE} // 그외 동작 {$ENDIF} 빌드설정 1) Project -> Project Options... 2) Custom Options 에서 -dTEST_MODE를 입력하면 가장 위에서 소개했던 If Define Test_Mode 부분 로직으로 빌드된다 틀린내용이나 질문은 댓글 부탁드립니다 감사합니다
Lazarus IDE single window / 라자루스 창 하나로 합치기 라자루스는 최초 설치시 각 윈도우들이 분리되어있다 심지어 위 사진과 달리 이쁘게 정렬되어있지도 않다 이 윈도우를 다른 IDE들 처럼 하나의 창으로 만드는법을 소개한다 1. 상단 Package -> Install/Uninstall Packages 2. 위 창에서 anchordocking을 검색하여 anchordocking, anchordockingDsgn 설치 후 재시작한다 혹은 install selection을 누른 뒤 하단에 Save and rebuild IDE를 누르면 자동으로 빌드가 되고 재시작된다 3. 완료 라자루스 2.1.0 버전으로 설명되어진 글입니다 틀린 내용은 댓글로 피드백 부탁드립니다 감사합니다