GeoGet

Complete geocaching solutions

User Tools

Site Tools


user:skript:mtptoollib

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
user:skript:mtptoollib [2019/06/15 16:02] – [Známé potíže] gorduser:skript:mtptoollib [2021/05/02 19:06] (current) mikrom
Line 10: Line 10:
 ===== Automatická instalace ===== ===== Automatická instalace =====
 ~~GEOGET_INSTALL~~ ~~GEOGET_INSTALL~~
- 
  
 <WRAP center round important 95%> <WRAP center round important 95%>
Line 18: Line 17:
  
 </WRAP> </WRAP>
- 
  
 ===== Popis ===== ===== Popis =====
Line 35: Line 33:
   * ''MtpCmd.exe'' - aplikace pro obsluhu MTP zařízení z příkazového řádku. Aplikace je zamýšlena zatím především pro ladění knihovny a obsahuje i funkce, které nejsou pomocí ''MtpToolLib.lib.pas'' dostupné   * ''MtpCmd.exe'' - aplikace pro obsluhu MTP zařízení z příkazového řádku. Aplikace je zamýšlena zatím především pro ladění knihovny a obsahuje i funkce, které nejsou pomocí ''MtpToolLib.lib.pas'' dostupné
   * testovací plugin [[#testdlluse|TestDllUse]], slouží také jako ukázka použití jednotlivých funkcí   * testovací plugin [[#testdlluse|TestDllUse]], slouží také jako ukázka použití jednotlivých funkcí
 +
 ==== Konstanty ==== ==== Konstanty ====
 Pro lepší přehlednost zdrojového kódu jsou v souboru ''MtpToolLib.dll.pas'', který je vložen do ''MtpToolLib.lib.pas'', definované konstanty: Pro lepší přehlednost zdrojového kódu jsou v souboru ''MtpToolLib.dll.pas'', který je vložen do ''MtpToolLib.lib.pas'', definované konstanty:
Line 46: Line 45:
 a ještě konstanta pro definici maximální délky vráceného textu: a ještě konstanta pro definici maximální délky vráceného textu:
 |MAX_STRING_RESULT_LENGTH|5000000| |MAX_STRING_RESULT_LENGTH|5000000|
- 
  
 ===== Funkce ===== ===== Funkce =====
Line 61: Line 59:
   * pokud je DLL knihovna použitá v konzolové aplikaci, postup je zobrazován textově v okně aplikace   * pokud je DLL knihovna použitá v konzolové aplikaci, postup je zobrazován textově v okně aplikace
   * pokud je DLL knihovna použitá ve windowsí aplikaci, progress bar je zobrazen v samostatném okně     * pokud je DLL knihovna použitá ve windowsí aplikaci, progress bar je zobrazen v samostatném okně  
-==== Verze knihovny a obsluha chyb ==== 
  
 +==== Verze knihovny a obsluha chyb ====
 <code delphi>function ML_GetDllVersion(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll <code delphi>function ML_GetDllVersion(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
 function ML_GetDllVersion:unicodestring; //MtpToolLib.lib.pas</code> function ML_GetDllVersion:unicodestring; //MtpToolLib.lib.pas</code>
Line 77: Line 75:
   * text chyby je zapsaný do ''sBuffer'', jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je ''iMaxBufferLen''   * text chyby je zapsaný do ''sBuffer'', jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je ''iMaxBufferLen''
   * pokud je vrácený text prázdný, k chybě nedošlo   * pokud je vrácený text prázdný, k chybě nedošlo
- 
  
 ==== Práce s MTP zařízením jako takovým ==== ==== Práce s MTP zařízením jako takovým ====
- 
 <code delphi>function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll <code delphi>function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
 function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):unicodestring; //MtpToolLib.lib.pas</code> function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):unicodestring; //MtpToolLib.lib.pas</code>
Line 141: Line 137:
  
 ==== Práce se soubory nebo adresáři ==== ==== Práce se soubory nebo adresáři ====
- 
 <code delphi>function ML_Exists(sPath:unicodestring):integer;</code> <code delphi>function ML_Exists(sPath:unicodestring):integer;</code>
   * funkce vrací 1, pokud existuje objekt (adresář, soubor, karta, ...) zadaný cestou ''sPath''   * funkce vrací 1, pokud existuje objekt (adresář, soubor, karta, ...) zadaný cestou ''sPath''
Line 155: Line 150:
  
 ==== Práce s adresáři ==== ==== Práce s adresáři ====
- 
 <code delphi>function ML_Dir(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll <code delphi>function ML_Dir(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
 function ML_Dir(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas</code> function ML_Dir(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas</code>
Line 194: Line 188:
   * ''bOverwrite''=1 povoluje "přepis" existujících souborů/adresářů   * ''bOverwrite''=1 povoluje "přepis" existujících souborů/adresářů
   * vrácená hodnota 0 znamená bez chyby   * vrácená hodnota 0 znamená bez chyby
- 
  
 ==== Práce se soubory ==== ==== Práce se soubory ====
- 
 <code delphi>function ML_GetFile(sSrc,sTrg:unicodestring):integer;</code> <code delphi>function ML_GetFile(sSrc,sTrg:unicodestring):integer;</code>
   * funkce kopíruje soubor ze zařízení do PC   * funkce kopíruje soubor ze zařízení do PC
Line 218: Line 210:
  
 ==== Vyhledání zařízení ==== ==== Vyhledání zařízení ====
- 
 <code delphi>function ML_FindGpsMobileDevice(sType:string; bAlwaysShowSelection:boolean):string;</code> <code delphi>function ML_FindGpsMobileDevice(sType:string; bAlwaysShowSelection:boolean):string;</code>
   * funkce se pokusí najít požadované připojené zařízení a vrací jeho jméno (případně celou cestu)   * funkce se pokusí najít požadované připojené zařízení a vrací jeho jméno (případně celou cestu)
Line 230: Line 221:
     * při hodnotě ''false'' je uživateli výběr k volbě zobrazen jen v tom případě, že je nalezeno více požadavku odpovídajících položek (např. a:Drake na více současně připojených telefonech a funkce nemůže rozhodnout, který z telefonů si uživatel přeje použít)     * při hodnotě ''false'' je uživateli výběr k volbě zobrazen jen v tom případě, že je nalezeno více požadavku odpovídajících položek (např. a:Drake na více současně připojených telefonech a funkce nemůže rozhodnout, který z telefonů si uživatel přeje použít)
     * při hodnotě ''true'' je výběr uživateli zobrazen vždy, i v případě, kdy by funkce rozhodnout mohla, protože bylo nalezeno jen jediné zařízení     * při hodnotě ''true'' je výběr uživateli zobrazen vždy, i v případě, kdy by funkce rozhodnout mohla, protože bylo nalezeno jen jediné zařízení
-===== Ukázka použití knihovny ===== 
  
 +===== Ukázka použití knihovny =====
 <code delphi> <code delphi>
 {$include MtpToolLib.lib.pas} {$include MtpToolLib.lib.pas}
Line 285: Line 276:
 ===== Známé potíže ===== ===== Známé potíže =====
 * **Could not call proc** * **Could not call proc**
-  * pokud pri spuštění napíše GeoGet něco takovéhoto: +  * pokud při spuštění napíše GeoGet něco takovéhoto: 
 <code> <code>
 [Script Runtime Error]: GgDrake.ggp.pas [Script Runtime Error]: GgDrake.ggp.pas
Line 297: Line 288:
   * smazání souboru někdy trvá neúměrně dlouho, netuším proč, možná to souvisí s předchozím bodem, možná je to proto, že se prověřuje, zda soubor nepoužívá nějaká aplikace a přes MTP driver to trvá dlouho (ale pak je divné, proč je to někdy rychle)   * smazání souboru někdy trvá neúměrně dlouho, netuším proč, možná to souvisí s předchozím bodem, možná je to proto, že se prověřuje, zda soubor nepoužívá nějaká aplikace a přes MTP driver to trvá dlouho (ale pak je divné, proč je to někdy rychle)
 * **jméno souboru nebo adresáře** * **jméno souboru nebo adresáře**
-  * zdá se, že žádný soubor v MTP nemá nastaven příznak umožnující přepis atributů souboru+  * zdá se, že žádný soubor v MTP nemá nastaven příznak umožňující přepis atributů souboru
   * proto se <wrap hi>nepodaří</wrap> nikdy soubor <wrap hi>přejmenovat</wrap> (ale smazat jej většinou možné je!)   * proto se <wrap hi>nepodaří</wrap> nikdy soubor <wrap hi>přejmenovat</wrap> (ale smazat jej většinou možné je!)
   * proto při zápisu souboru do MTP zařízení, pokud soubor existuje, <wrap hi>není možné soubor jednoduše přepsat</wrap>, ale soubor stejného jména je napřed vymazán a pak zkopírován jako nový soubor (má tedy jiné ID než původní soubor)   * proto při zápisu souboru do MTP zařízení, pokud soubor existuje, <wrap hi>není možné soubor jednoduše přepsat</wrap>, ale soubor stejného jména je napřed vymazán a pak zkopírován jako nový soubor (má tedy jiné ID než původní soubor)
-  * ačkoli telefon vrací vždy všechny texty v ''unicode'' kódování, nastane pravděpodobně problém v případě, kdy Windows a telefon nebudou obsahovat stejnou lokalizaci nebo znakovou sadu. Např. v případě, kdy Windows budou anglické, težko knihovně sdělíte, že potřebujete soubor z/do ''Interní úložiště'', jak je v telefonu s českou lokalizací nazvané paměť v telefonu mimo výměnnou SD kartu+  * ačkoli telefon vrací vždy všechny texty v ''unicode'' kódování, nastane pravděpodobně problém v případě, kdy Windows a telefon nebudou obsahovat stejnou lokalizaci nebo znakovou sadu. Např. v případě, kdy Windows budou anglické, žko knihovně sdělíte, že potřebujete soubor z/do ''Interní úložiště'', jak je v telefonu s českou lokalizací nazvané paměť v telefonu mimo výměnnou SD kartu
 * **datum, čas** * **datum, čas**
   * při kopírování souborů nebo adresářů do MTP zařízení sice nastavuji datum vytvoření a aktualizace souboru nebo adresáře, ale zdá se, že MTP driver v zařízeních některých výrobců má vlastní hlavu a vždy nastavují aktuální datum a čas bez ohledu na atributy nastavené při vytváření. Díky předcházejícímu bodu ani není možné později nastavit tato časová razítka správně a případné synchronizace souborů je přinejmenším sporná   * při kopírování souborů nebo adresářů do MTP zařízení sice nastavuji datum vytvoření a aktualizace souboru nebo adresáře, ale zdá se, že MTP driver v zařízeních některých výrobců má vlastní hlavu a vždy nastavují aktuální datum a čas bez ohledu na atributy nastavené při vytváření. Díky předcházejícímu bodu ani není možné později nastavit tato časová razítka správně a případné synchronizace souborů je přinejmenším sporná
Line 320: Line 311:
  
 Zde uvedená verze **Combine** je rozšířená o funkce pro MTP zařízení. Jde rovněž o betaverzi, proto není dostupná na stránce pluginu Combine, ale jen zde. Součástí instalace je ukázková dávka pro "bezpečné" zkopírování databáze do a:Drake. Při kopírování dávka vyhledá připojené zařízení s instalací a:Drake, podle jeho INI souboru najde adresář a databázi, kterou a:Drake používá, zkontroluje, zda kopírovaná databáze z GeoGetu má stejné jméno, databázi zkopíruje a vymaže žurnálový soubor. Zde uvedená verze **Combine** je rozšířená o funkce pro MTP zařízení. Jde rovněž o betaverzi, proto není dostupná na stránce pluginu Combine, ale jen zde. Součástí instalace je ukázková dávka pro "bezpečné" zkopírování databáze do a:Drake. Při kopírování dávka vyhledá připojené zařízení s instalací a:Drake, podle jeho INI souboru najde adresář a databázi, kterou a:Drake používá, zkontroluje, zda kopírovaná databáze z GeoGetu má stejné jméno, databázi zkopíruje a vymaže žurnálový soubor.
 +
 ===== Seznam změn ===== ===== Seznam změn =====
 ** 1.0.1 (6.4.2018) ** ** 1.0.1 (6.4.2018) **
Line 327: Line 319:
     * oprava: Refresh přidával k seznamu nalezených zařízení místo aby v seznamu byly jen nově/opakovaně nalezené     * oprava: Refresh přidával k seznamu nalezených zařízení místo aby v seznamu byly jen nově/opakovaně nalezené
     * oprava: nalezení ADRAKE_INST a ADRAKE_DB hledá i pro ''a:Drake Plus'' a také staré umístění v ''/adrake''     * oprava: nalezení ADRAKE_INST a ADRAKE_DB hledá i pro ''a:Drake Plus'' a také staré umístění v ''/adrake''
- 
  
 ** 1.0.0 (1.2.2017) ** ** 1.0.0 (1.2.2017) **
Line 346: Line 337:
     * změna: trochu jsem učesal výpisy (i v ''TestUseDll.ggp.pas'')     * změna: trochu jsem učesal výpisy (i v ''TestUseDll.ggp.pas'')
     * změna: doplněna funkce pro výpis vlastností objektů pro ukládání dat (SD karty, ...)     * změna: doplněna funkce pro výpis vlastností objektů pro ukládání dat (SD karty, ...)
- 
  
 ** 0.7.5 (11.11.2016) ** ** 0.7.5 (11.11.2016) **
user/skript/mtptoollib.txt · Last modified: 2021/05/02 19:06 by mikrom