J'ai compilé une bibliothèque statique et lié à la fois SQLCipher et OpenSSL. Le projet complet, makefile et bibliothèque compilée se trouvent ici:Utilisation de SQLCipher avec MonoTouch
https://github.com/anujb/SQLCipherNet
Lorsque je lie la bibliothèque résultant d'un projet Objective-C Xcode normale, l'appel à sqlite3_key
fonctionne très bien.
J'ai lié la même bibliothèque dans un projet MonoTouch en utilisant:
-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"
J'ai modifié SQLite-NET pour appeler la fonction clé, après chaque fonction SQLite3.Open(...)
:
[DllImport("__Internal", EntryPoint = "sqlite3_key")]
public static extern Result Key(IntPtr db, string key, int keyLength);
Mais j'obtiens une exception EntryPointNotFoundException lorsque la méthode Key est appelée. Voici la trace de la pile:
System.EntryPointNotFoundException has been thrown at:
at (wrapper managed-to-native) SQLite.SQLite3:Decrypt (intptr,string,int)
at SQLite.SQLiteConnection..ctor (System.String databasePath) [0x00031] in
../SQLite.cs:108
Il est évident que le stacktrace est pas particulièrement utile, mais je suis à une perte à l'endroit où commencer à déboguer cette question. Halp?
Haha, erreur d'amateur! Fonctionne très bien lorsque j'ajuste les arguments de construction. Maintenant, j'ai juste besoin de documenter ce processus! – Anuj