Delphi で、ActiveSync 中の Windows CE / Mobile 機へファイルを転送するには、RAPI を使います。CodeCentral に RAPI の定義ユニットがアップされていますので、これを使うのが簡単でいいでしょう。
[Transfer files from/to Pocket PC through RAPI]
http://cc.embarcadero.com/Item/22950
必要なのは、アーカイブ中の RAPI.pas と RAPI2.pas だけです。コメ欄にもありますが、ちょっとした RAPI.pas の修正が必要です。
1.CeRapiUnInit を CeRapiUninit に全置換する (大文字/小文字の違いです)。
2.RapiLoaded() の実装部に 1 行追加。
function RapiLoaded : BOOL; {-Assure that TAPI is loaded and globals are set} begin ... @mRapiFreeBuffer := GetProcAddress(RapiModule, 'RapiFreeBuffer'); @mCeRapiInitEx := GetProcAddress(RapiModule, 'RapiInitEx'); // <- 追加
3.AdoCELoaded() の実装部を 1 行変更。
{Load ADOCE} //AdoCEModule := LoadLibrary('C: \Archivos de Programa\Microsoft ActiveSync\adofiltr.dll'); AdoCEModule := LoadLibrary('C:\Program Files\Microsoft ActiveSync\adofiltr.dll'); // <- 変更
Unicode 版 Delphi で使うためには以下の修正も必要です。
...
//added 10/16/2000 - Terence Goggin; terencegoggin@hotmail.com //TDesktopToDevice = function(DesktopLocation, TableList: String; Sync: BOOL; Overwrite: Integer; DeviceLocation: String): Longint stdcall; TDesktopToDevice = function(DesktopLocation, TableList: AnsiString; Sync: BOOL; Overwrite: Integer; DeviceLocation: AnsiString): Longint stdcall; //added 01/19/2003 - Octavio Hernandez; dotnet@danysoft.com //TDeviceToDesktop = function(DesktopLocation, TableList: String; Sync: BOOL; Overwrite: Integer; DeviceLocation: String): Longint stdcall; TDeviceToDesktop = function(DesktopLocation, TableList: AnsiString; Sync: BOOL; Overwrite: Integer; DeviceLocation: AnsiString): Longint stdcall;
...
//added 10/16/2000 - Terence Goggin; terencegoggin@hotmail.com //function DesktopToDevice(DesktopLocation, TableList: String; Sync: BOOL; Overwrite: Integer; DeviceLocation: String): Longint; function DesktopToDevice(DesktopLocation, TableList: AnsiString; Sync: BOOL; Overwrite: Integer; DeviceLocation: AnsiString): Longint; //added 01/19/2003 - Octavio Hernandez //function DeviceToDesktop(DesktopLocation, TableList: String; Sync: BOOL; Overwrite: Integer; DeviceLocation: String): Longint; function DeviceToDesktop(DesktopLocation, TableList: AnsiString; Sync: BOOL; Overwrite: Integer; DeviceLocation: AnsiString): Longint;
// (実装部も同様)
String を AnsiString に変更しているだけです…とは言えこの部分は変更しなくても構いません。Windows Mobile だと ADOCE 関連はデフォルトでは動作しませんので、MDB の変換を行うこれら 2 つの関数を使う事はまずないと思われるからです (どのみち adofiltr.dll が "存在しなくて/最近の WM に対応していなくて" 使えないと思いますが)。
実際のファイルコピーの方法はデモプログラムを見れば一目瞭然だと思いますので省略します。
|