본문 바로가기

운동하는 개발자/Lazarus

(9)
error: internal error 200601281 잘 작동하던 코드에서 어느날 컴파일 에러가 발생했다 error: internal error 200601281 라는 문구가 나오며 해당 라인에는 클래스에서 사용하는 const로 선언된 변수가 있는 부분이였다 단지 로그 찍을때 편하게 클래스 명을 찍으려고 둔.. 구글링 해보니 나와 아주 똑같은 에러가 뜬 사람은 없고 (200601281 저 숫자가 무엇을 뜻하는지도 모르겠음 에러코드라기엔 너무 길고 메모리 주소값 같기도하고..) 숫자만 다르고 같은 에러를 발생하는 사람이 있었다 https://forum.lazarus.freepascal.org/index.php?topic=39507.15 링크가 언제까지 살아있을지 모르니 결론만 퍼오자면 저사람은 error: internal error 200611031 라는 에..
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 설치 - 2 2021/01/28 - [운동하는 개발자/Lazarus] - 라자루스(프리파스칼) 로 안드로이드에 사용 될 so파일 생성 / how to make .so for android to LAZARUS(freepascal) / fpcupdeluxe 설치 - 1 라자루스(프리파스칼) 로 안드로이드에 사용 될 so파일 생성 / how to make .so for android to LAZARUS(freepas Lazarus(Freepacal)를 이용하여 안드로이드 native library인 .so파일을 Cross Compile 하여 생성 해보자 1. 우선 크로스컴파일을 가능하게 해주는 fpcupdeluxe라는 프로그램을 다운받아야 한다 1-1) fpcupdeluxe.. singo112ok.tistory.com 1..
라자루스(프리파스칼) 로 안드로이드에 사용 될 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 부분 로직으로 빌드된다 틀린내용이나 질문은 댓글 부탁드립니다 감사합니다