# WindowsMobile로부터 외부의 MySQL DB서버에 액세스하는 방법
Category: "DB-Tracklayer개발, MySQL, 개발, 데이터베이스, 프로그래밍" , Tags: C++, MFC, MySQL, PocketPC, WindowsMobile
타카보ㅡ@프로그래머 입니다.
지난번 투고에서 iPhone으로부터 MySQL DB서버에 접속하는 방법을 설명했지만,
이번에는 그것의 WindowsMobile판의 이야기입니다.
로ー루군이 비슷 비슷한 테마의 기사를 투고하고 있는 것 같은 생각이 듭니다만, 분명 기분탓이겠죠.
그건 그렇고, WindowsMobile은, iPhone과 달라서 시판되고 나서 꽤 시간이 흘러서, 업 그레이드가 되풀이 되고 있는 면도 있어서, 이미 뭔가 MySQL DB에 접속하는 방법이 개발되어 있을 것이라고 생각해 찾아 보니, 금방 찾을 수 있었습니다.
공식 사이트에 MySQL Connector/NET라고 하는, .NET판의 라이브러리가 있어서, Compact Framework 2.0에 대응하고 있다는 표기가 있었습니다.
Compact Framework라고 하는 것은 .NET Framework을 WindowsMobile에서 동작 하도록 기능을 최저한으로 하거나, 모바일기에 필요한 것을 별도로 추가하거나 한 것으로, 결국 .NET에서 응용 프로그램을 개발하고 있으면 MySQL DB에는 간단히 접속할 수 있습니다.
그러나, 이번에는 C/C++언어로 하고 싶다라는 회사의 의향도 있어, 이 방법은 사용하지 않게 되었습니다.(동작 속도나 소비 메모리, 대응 OS의 면에서 아마 C/C++쪽이 유리)
이러한 연유로 이번에도 iPhone판과 같이 MySQL Connector/C의 소스를 WindowsMobile용으로 수정하는 방향성으로 작업을 진행시킨 것이지만, iPhone판과 비교해서 상당히 수정한 것이 많아졌습니다.
WindowsMobile에서 컴파일 함에 있어서, 통상의 PC의 Windows판의 source code를 유용했습니다만, 원래
Windows Mobile의 Win32 API는 본래의 Win32 API의 일부 밖에 지원하지 않고 있음
C표준 라이브러리도 같이 일부 밖에 지원하지 않고 있음
문자코드는 Uni 코드만 (API도 기본적으로는 Uni 코드만 지원)
current directory라고 하는 개념이 없음
등등의, Windows와는 상당히 사정이 다르기 때문에, 컴파일 에러가 셀수 없이 많이 나옵니다.
이것을 하나하나 수정해 가는 작업이 필요하게 되는 셈입니다.
대체코드를 쓰거나, 멀티 바이트로부터 unicode로 변환하는 코드를 집어내거나 해 나가는 셈입니다.
그렇게 해서 드디어 에러를 전부 수정해도, 이것만으로는 실제로 아직 움직이지 않습니다.
WindowsMobile은 얼라인먼트의 제약이 엄격하기 때문에, 불완전한 메모리 포인터를 int로써 읽으려고 하면, 실행시에 에러가 발생해 버립니다. MySQL의 source code에 그러한 변환 매크로가 몇개 존재하고 있기 때문에, 그것들을 다른 수단에 바꿔 놓을 필요가 있습니다. (1바이트씩 읽는 등)
이것으로 드디어 움직이게 되었습니다.
이번에는 MFC을 이용하므로, MySQL C API의 wrapper class를 만들면, 드디어 완성입니다.


