본문 바로가기

Development Experience

(85)
개발 환경 세팅시 알게된 점 (Visual Studio, vcpkg) 1. Visual Studio 버전에 따라 제공되는 C#의 버전도 다르다. 2. vcpkg는 Third Party Library들을 Visual Studio에서 쉽게 사용하게 해주는 툴이다. git clone, build 만 하면 Visual Studio가 참조하는 헤더파일, 라이브러리 경로 설정 등도 다 자동으로 해준다. 3. C# 프로젝트의 Output은 환경변수에 따라 저절로 바뀌지 않고 static으로 넣어주게끔 되어 있다... 4. 함수호출규약 - cdecl은 C/C++ - stdcall은 여러 프로그래밍 언어의 공통 표준 - cdecl, stdcall 에 따라 스택에 함수 인자 등이 쌓이는 방식이 다르다.
C# 과 C++ 간 마샬링시 Heap Corruption 오류에 관하여 * 현상 : Marshaling 할 때 C#에서 out 파라미터로 보낸 string 변수를, C++ 에서 이 변수에 메모리 할당 후 C#으로 리턴을 시도하였다. 하지만 C++ 함수가 리턴되자마자 C#에서는 Heap Corruption 에러가 발생하였다. 원인을 찾아보니 C++에서 관리하는 메모리는 C++에서 할당 및 해제를, C#에서 관리하는 메모리는 C#에서 할당 및 해제를 해야 하는 것 같았다. exe 파일(C#으로 작성)과 dll 파일(C++로 작성)에서 관리하는 힙 영역은 각각의 CRT 라이브러리를 사용하고 각자의 Heap Manager를 소유하고 있다. 그래서 한 CRT 라이브러리 내에서 할당한 메모리를 포인터를 통해 DLL boundary 너머로 보내고, 다른 CRT 라이브러리에서 이 메모리를..
[Exception] 지정된 파일을 찾을 수 없습니다. C# 을 이용하여 window service 를 start / stop 하는 과정에서 "지정된 파일을 찾을 수 없습니다." 라는 Exception 이 발생하였다. 디버깅 결과, 해당 서비스의 레지스트리 값이 손상되어서 발생하였음을 알게 되었다. "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" + "해당 서비스 이름"
Kotlin realm-recycler-view 대신 realm-recyclerview Kotlin을 이용하여 안드로이드 앱을 만들다가 접었다. 참고 자료가 Java에 비해 별로 없다는 느낌을 강하게 받았기 때문이다. 그래서 Java를 이용해서 프로젝트를 새로 빌드하고 RealmRecyclerView 를 사용하기 위해 build gradle에 maven { url "https://jitpack.io" } 를 추가하고 dependencies {} 에는 implementation 을 추가하였다. realm 'com.github.thorbenprimke:realm-recycler-view:0.9.4' 을 implementation 하라고 써있었는데 악몽은 여기서부터 시작되었다. dependencies { implementation 'com.github.thorbenprimke:realm-recy..
Kotlin 에서 Realm을 처음 써보고 알게 된 사실 1. Realm의 reactive architecture의 핵심이 되는 독특한 특징 중 하나는 Live / Auto updating objects 방식이다. 2. Realm 은 UI 에서 보여주는 데이터들이 Live Object 이다. 덕분에 UI 에서 Database 로 빙빙 돌아갈 필요 없이, Database에 있는 object를 그대로 보여주기만 하면 그것이 최신 데이터가 된다. 3. Realm 은 Cross-platfrom 을 지향하기 때문에 Enum 타입을 지원하지 않는다. 따라서 Enum을 쓰고 싶다면 EumType.toString() 을 호출하여 EnumType -> String 으로 변환한 후 DB에 저장하면 된다. 데이터를 DB에서 꺼낼때는 값(enumItem)을 빼낸 후 이 값을 Str..