C ++ - Использование HunSpell 1.3.2 с Visual Studio 2010 - PullRequest
2 голосов
/ 14 марта 2012

Моя цель - создать простое консольное приложение Win32, которое использует HunSpell для проверки правописания введенного пользователем слова. Я пытался следовать этому учебному коду проекта кода , который предназначен для Visual Studio 2008 и HunSpell 1.2.1.

Я не хочу использовать предоставленный код, поскольку я собираюсь написать свой собственный. Кроме того, я хочу добавить HunSpell как dll, а не как статическую библиотеку.

Ниже приведены шаги, которые я предпринял:

  1. Создан консольный (пустой) проект Win32 с именем myproject.
  2. Скачанный HunSpell 1.3.2 с SourceForge.org.
  3. Скопировано hunspell-1.3.2 \ src \ hunspell и win_api в myproject \ myproject \ HunSpell-Src
  4. Добавлен и преобразован проект libhunspell myproject \ myproject \ HunSpell-Src \ win-api \ libhunspell.vcproj к решению.
  5. В моей отладочной сборке использовались debug_dll и моя сборка выпуска release_dll libhunspell в Configuration Manager.
  6. Перестроен проект libhunspell, libhunspell.dll создается в папках debug_dll и release_dll соответственно.
  7. Сделал мой консольный проект зависимым от libhunspell. (Добавлена ​​ссылка на libhunspell)
  8. Скопированные файлы словарей en_US.aff & en_US.dic в myproject \ myproject \ HunSpell-Dic после их загрузки с SourceForge.org.

Я не могу понять, как / где добавить процессор, определяющий HSPELLEDIT_DLL, который упоминается в руководстве по проекту кода.

В соответствии с шагами, перечисленными в разделе «Использование функций из библиотеки классов в консольном приложении» на MSDN , результат не изменился.

Я хочу проверить это с помощью программы, подобной этой:

#include <iostream>
#include "HunSpell-Src/win_api/hunspelldll.h"

using namespace std;

void main()
{
    void *spellObj = hunspell_initialize("HunSpell-Dic\\en_us.aff", "HunSpell-Dic\\en_us.dic");

    char str[60];

    cin >> str;

    int result = hunspell_spell(spellObj, str);

    if(result == 0)
        cout << "Spelling error!";
    else
        cout << "Correct Spelling!";

    hunspell_uninitialize(spellObject);
}

VS выдает следующее сообщение об ошибке, если я пытаюсь его скомпилировать:

myproject\myproject\hunspell-src\win_api\hunspelldll.h(34): fatal error C1083: Cannot open include file: 'hunspell.hxx': No such file or directory

Hunspell.hxx присутствует в myproject \ myproject \ HunSpell-Src \ hunspell. IntelliSense помечает файл #include «hunspell.hxx» как ошибку, в то время как вкладка не фокусируется с сообщением «Ошибка: не удается открыть исходный файл hunspell.hxx», но после выделения этой ошибки ошибка исчезает.

Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 14 марта 2012

Определение препроцессора, HSPELLEDIT_DLL, не требуется, если вы не собираетесь фактически использовать пользовательский элемент управления кода проекта.Если вы хотите определить его (или другие определения препроцессора), обратитесь к / D (Определения препроцессора) .

Строки вашего пути должны быть двойными \ вместо одиночных \ экранированных иу вас есть некоторые проблемы с компиляцией:

#include <iostream>
#include "HunSpell-Src/win_api/hunspelldll.h"

using namespace std;

void main()
{
    Hunspell *spellObj = (Hunspell *)hunspell_initialize("HunSpell-Dic\\en_us.aff", "HunSpell-Dic\\en_us.dic");
//  ^change * type        ^cast returned void* to type that will be used later

    char str[60];

    cin >> str;

    int result = hunspell_spell(spellObj, str);

    if(result == 0)
        cout << "Spelling error!";
    else
        cout << "Correct Spelling!";

    hunspell_uninitialize(spellObj /*SpellObject is undefined*/);
//                        ^use correct variable
}

Для Hunspell.hxx вы должны сообщить своему проекту, как его найти.Для этого откройте настройки своего проекта и укажите путь к Hunspell.hxx в «Дополнительные каталоги включения» в разделе «Свойства конфигурации»> «C ++»> «Общие».См. / I (дополнительные каталоги включения) .

На основе вашей структуры каталогов:

  • Ваш Project > Properties > Configuration Properties > C++ > General > 'Additional Include Directories' должен выглядеть следующим образом: .\HunSpell-Src\hunspell;%(AdditionalIncludeDirectories)

  • Ваш Project > Properties > Configuration Properties > Linker > General > 'Additional Library Directories' должен выглядеть следующим образом: .\Debug_dll\libhunspell;%(AdditionalLibraryDirectories)

Вы будететакже необходимо скопировать myproject\myproject\Debug_dll\libhunspell\libhunspell.dll в выходной каталог вашего проекта (. \ Debug), иначе ваш exe не сможет его найти.

...