Nach nunmehr fast einer Woche vergeblicher Suche habe ich es heute nun selbst geschafft.
Nirgendwo war eine Delphi-Komponente oder ein verwertbarer Code zur Nutzung der PortableDeviceApiLib zu finden.
Diese Lib ermöglicht es z.B. vom iPhone Fotos und Videos auf den PC zu laden. Leider ist sie sehr schlecht dokumentiert. Außerdem enthält die Typelibrary, die über "Projekt/Typelibrary importieren" erstellt wird einige Fehler. Diese sind entsprechend korrigiert.
Bisher machte ich dies über die WIA-Schnittstelle zu der einiges im Internet zu finden ist.
Der Nachteil von WIA ist, dass ab Windows 7 nur Fotos (also keine Videos) geladen werden können. Ein weiterer Nachteil, der mir allerdings erst seit letzter Woche bekannt wurde ist, dass doppelte Dateinamen, die dann vorkommen, wenn die automatische Dateinumerierung des iPhones wieder von vorne beginnt (weil der in diesem Fall vierstellige Nummernkreis erschöpft ist) über WIA nicht zu verarbeiten sind. In meinem Fall hatte das iPhone meines Chefs die Dateinumerierung bei IMG_0001.jpg fortgeführt, weil bereits mehr als 9.999 Fotos auf dem Gerät waren.
Hintergrundinfo: Mein Chef löscht niemals Fotos nach der Übertragung auf den PC. Daher musste ich vor einiger Zeit ein Programm entwickeln, das automatisch nur die Bilder vom iPhone lädt, die noch nicht auf den PC übertragen wurden.
Aus diversen Codeschnipseln, die allesamt in C++ vorlagen habe ich nun ein (gut) funktionierendes Beispielprogramm erstellt, das von einem angeschlossenen iPhone oder iPad alle Dateien in einen Ordner (in der Form ..\Devicename\Seriennummer\...) unterhalb der Programmverzeichnisses lädt.
Meine Quellen hierzu waren:
msdn.microsoft.com/e...388996(v=vs.85).aspx
Ausserdem:
cgeers.com/2011/08/1...ransferring-content/
- dieser Autor hatte auch einen Delphi-Beitrag (den ich aber nicht mehr finde) in dem die Fehler der importierten Typelibrary beschrieben waren. Allerdings hatte er die Funktionsparameter die original als Word deklariert sind, in Pointer geändert. Dies führte zu grauenvollen GPF´s wenn Fastmm4 eingebunden wurde (was ich generell mache um Leaks zu finden). Daher habe ich diese Parameter allesamt als PWideChar geändert. Damit waren die GPF´s dann weg.
Der lange Rede kurzer Sinn: Mein Programm funktioniert. Habe grade fast 20 GB vom iPhone 5 in Rekordzeit runtergeladen. Auch vom iPad Mini geht dies nun in Turbogeschwindigkeit.
Anbei mein Sourcecode, der keinerlei zusätzliche Bibliotheken oder Komponenten benötigt. Einfach die DPR-Datei laden und kompilieren.
Ich benutze übrigens noch Delphi 5. Bei allen folgenden Versionen müssen also die üblichen Veränderungen (z.B. Variants bei Delphi 7) in der Uses-Clause gemacht werden.