Как использовать SQLite в WinRT DLL? - PullRequest
5 голосов
/ 14 октября 2011

Я пытаюсь разработать WinRT DLL, которая использует SQLite для записи базы данных. Но кажется, что некоторые win32 API в исходном коде SQLite не поддерживаются metro, например, LoadLibraryW, GetTempPathA.

Есть ли способ компилировать исходный код SQLite или использовать SQLite с WinRT DLL?

Ответы [ 6 ]

2 голосов
/ 31 августа 2012

В VS2012 есть расширение, которое теперь называется SQLite для среды выполнения Windows. Вы можете загрузить и установить это через Visual Studio (требуется перезагрузка IDE). Затем перейдите в проект WinRT, добавьте ссылку, в разделе «Windows» выберите «Расширения», и вы должны увидеть его.

enter image description here

2 голосов
/ 14 октября 2011

Ну, вы всегда можете статически связать sqlite3 и определить новые функции для доступа к файлам и т. Д. Через sqlite3_vfs .

1 голос
/ 02 мая 2012

Теперь существует ветка winrt SQLite, которая использует только поддерживаемый API. Кроме того, мы реализовали SQLite3-WinRT , компонент WinRT, который позволяет использовать SQLite на любом из языков WinRT.

0 голосов
/ 03 сентября 2012

Позвольте мне добавить несколько замечаний по использованию sqlite / winrt, которые могут избавить вас от головной боли:

  1. Winrt позволяет писать только в определенную папку (c: \ users \ \ Мои документы \ ). Вы должны поместить свою БД здесь. (Тривиально в управляемой среде.)

  2. Время от времени Sqlite использует временные файлы. (Сложные запросы, для которых требуются временные индексы, вакуум и т. Д.) Эти файлы также должны быть созданы в папке приложения, но sqlite не сделает этого, если вы не установите его с помощью прагмы temp_store_directory. Если вы этого не сделаете, вы можете получить случайные сообщения об ошибках пользователя.

  3. Обратите внимание, что вышеприведенная прагма официально устарела. Проигнорируйте это. У нативных кодеров может возникнуть соблазн использовать вместо этого глобальную переменную sqlite3_temp_directory (рекомендуется), но текущий двоичный выпуск (dll) не публикует эту переменную. (Вы можете сделать это самостоятельно, но затем измените исходные коды sqlite и используйте атрибут _declspec (dllexport); файл def не работает.)

  4. Не слишком полагайтесь на операции с файлами sqlite. Реализация не особенно хороша. Например, проверка доступа на запись будет успешной, даже если у вас нет прав на запись.

Кроме этого, похоже, нет проблем с winrt. Более опытные пользователи могут предоставить свой собственный (лучший) драйвер winrt. Это не так уж сложно ...

0 голосов
/ 25 июня 2012

с сайта SQLite

В SQLite версии 3.7.13 добавлена ​​поддержка приложений WinRT и metro-стиля для Microsoft Windows 8. Выпуск 3.7.13 выйдет раньше, чем обычно, после предыдущего выпуска, чтобы передать эту новую возможность в руки разработчиков. Чтобы использовать SQLite в приложении в стиле metro, скомпилируйте с флагом -DSQLITE_OS_WINRT. Из-за повышенных требований безопасности и безопасности приложений WinRT все имена файлов базы данных должны быть полными путями. Обратите внимание, что SQLite не может получить доступ к базам данных вне каталога установки и каталога данных приложения. Это ограничение - еще одна функция безопасности WinRT. Помимо этих ограничений, SQLite должен работать точно так же в WinRT, как и в любой другой системе.

Тим Хойер (Tim Heuer) предоставляет пошаговое руководство по созданию приложения для метро с использованием SQLite в своем блоге

0 голосов
/ 17 ноября 2011
  1. переименовать sqlite3.c в sqlite3.cpp
  2. заменить LoadLibrary на LoadPackagedLibrary
  3. Исправлено множество синтаксических ошибок.
...