본문 바로가기

개발48

GDI+ Bitmap 복사하기 C++ GDI+ Bitmap을 복사본을 만들려면 아래처럼 Clone 메서드를 사용하게 됩니다. Gdiplus::Bitmap* pBitmap = bitmap.Clone(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), bitmap.GetPixelFormat()); 하지만 Clone 메소드는 깊은 복사(deep copy)가 아니라 얕은 복사(shallow copy)이기 때문에 원본을 변경하면 복사본도 변경되고 복사본을 변경하면 원본도 변경됩니다. 완전한 복사본을 만드려면 Bitmap 객체를 생성해서 원본 Bitmap을 직접 그려줍니다. Gdiplus::Bitmap* pBitmap = new Gdiplus::Bitmap(bitmap.GetWidth(), bitmap.GetHeight().. 2021. 1. 1.
VC++ 2017에서 개발한 COM DLL 등록 문제 Visual C++ 2017에서 개발한 COM DLL을 Windows XP에서 등록하는 경우 아래처럼 에러가 발생한다.이 문제는 VC++의 컴파일 옵션에 /Zc:threadSafeInit-를 추가하면 해결할 수 있다./Zc:threadSafeInit 옵션은 정적 로컬 변수를 자동으로 스레드에서 안전하게 초기화해주는 옵션으로 Windows Vista 이상에서 제공하는 기능을 사용한다. VC++ 2015 이상부터 제공하는 옵션으로 기본적으로 활성화되어 있다. Windows XP나 Windows Server 2003 이하에서는 제공하지 않는 기능이므로 문제가 생기는 것으로 보인다.Visual C++ 2015에서는 수정되어 업데이트 되었다고 하는데 Visual C++ 2017에서는 수정이 안 되었고 Window.. 2018. 11. 29.
[MySQL] 서브 쿼리(하위 질의) 서브 쿼리는 하위 질의라고도 하며 다른 명령문 내의 SELECT 명령문이다.SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);이 예에서 SELECT * FROM t1 ...은 외부 쿼리(또는 외부 문)이고 (SELECT column1 FROM t2)는 서브 쿼리라고 한다. 서브 쿼리는 상당히 깊이 중첩될 수 있으며 항상 괄호 안에 적어야 한다.서브 쿼리의 이점은 다음과 같다.명령문의 각 부분을 격리해서 구조화된 쿼리를 가능하게 한다.복잡한 join이나 union을 대체할 수 있다.많은 사람이 서브 쿼리를 복잡한 join이나 union보다 쉽게 읽을 수 있다.서브 쿼리가 어떤 행이든 반환하면 EXISTS는 TRUE, NOT EXISTS는 FALSE가 된.. 2018. 8. 22.
[MySQL] 테이블 결합하기(JOIN) 여러 개의 테이블을 특정 키로 결합하는 것을 테이블 참조, 조인식이라고 한다.SELECT t1.name, t2.salary FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name;MySQL에서는 JOIN, INNER JOIN, CROSS JOIN은 동일하다. 표준 SQL에서는 ON 구문에서는 INNER JOIN을 사용하고 다른 경우는 CROSS JOIN을 사용한다.ON을 사용해서 결합 조건을 표현할 수 있고 결합에 사용하는 키 이름이 같은 경우 USING 사용해서 표현할 수 있다.SELECT t1.name, t2.salary FROM employee t1 JOIN info t2 USING (name);내부 조인(JOIN, INNER JOIN)은 결.. 2018. 8. 1.
[MySQL] 추출 결과 합치기(UNION) UNION 구문을 사용하면 SELECT로 추출한 결과를 합칠 수 있다.SELECT ... UNION [ALL | DISTINCT] SELECT ...추출한 결과의 자료형은 일치해야 하지만 다를 경우 MySQL이 전체 SELECT 구문에서 추출한 값을 고려해서 결정한다.기본적으로 최종 결과에서 중복된 레코드는 제거됩니다. 필요하진 않지만 DISTINCT 키워드로 명시적으로 중복 제거를 표시할 수 있다.데이터가 많을 경우 중복 제거는 속도에 영향이 있기 때문에 ALL 키워드를 사용해서 중복을 제거하지 않을 수 있다. 2018. 8. 1.
[MySQL] 논리 연산자 우선 순위 MySQL의 WHERE 절에서 논리 연산자인 AND나 OR를 사용하는 경우 AND 연산자 우선 순위가 높기 때문에 무조건 AND가 먼저 처리된다.만약 OR를 먼저 처리하고 싶다면 괄호()를 이용해서 아래와 같이 감싸줘야 한다.SELECT * FROM table1 WHERE (col1=1 OR col2=1) AND col3=1;참고로 MySQL 연산자 우선순위는 아래와 같다.INTERVAL BINARY, COLLATE ! - (unary minus), ~ (unary bit inversion) ^ *, /, DIV, %, MOD -, + & | = (comparison), , >=, >, 2018. 8. 1.