Category: "DB-Tracklayer 開発, MySQL, Web, データベース, プログラミング, 開発" , Tags: C++, MFC, MySQL, PocketPC, WindowsMobile
WindowsMobile로부터 외부의 MySQL DB서버에 액세스하는 방법
たかぼー(타카보)@프로그래머입니다.
앞의 투고로 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를 만들고, 드디어 완성입니다.
Language: 1 2 3 4 5
[1:日本語, 2:English, 3:简体中文, 4:繁體中文, 5:한국어]


