2

私の目標は、HunSpell を使用してユーザーが入力した単語のスペル チェックを行う単純な Win32 コンソール アプリケーションを作成することです。Visual Studio 2008 および HunSpell 1.2.1 用のこの codeproject チュートリアルに従おうとしました。

私は自分で書くつもりなので、提供されたコードを使用したくありません。さらに、静的ライブラリとしてではなく、DLL として HunSpell を追加したいと考えています。

私が取った手順は次のとおりです。

  1. myproject という名前の Win32 コンソール (空の) プロジェクトを作成しました。
  2. SourceForge.org から HunSpell 1.3.2 をダウンロードしました。
  3. hunspell -1.3.2\src\ hunspellとwin_apimyproject\myproject\HunSpell-Srcにコピー
  4. プロジェクト libhunspell myproject\myproject\HunSpell-Src\win-api\libhunspell.vcproj をソリューションに追加して変換しました。
  5. Configuration Manager で、デバッグ ビルドに debug_dll を使用し、リリース ビルドに libhunspell の release_dll を使用するようにしました。
  6. libhunspell プロジェクトを再ビルドすると、libhunspell.dllが debug_dll フォルダーと release_dll フォルダーにそれぞれ生成されます。
  7. コンソール プロジェクトを libhunspell に依存させました。(libhunspell への参照を追加)
  8. SourceForge.org からダウンロードした辞書ファイル en_US.aff と en_US.dic をmyproject\myproject\HunSpell-Dicにコピーしました。

codeprojectチュートリアルで言及されているプロセッサ定義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 にあります。タブが「エラー: ソース ファイル hunspell.hxx を開けません」というメッセージでフォーカスされていない間、IntelliSense は #include "hunspell.hxx" をエラーとしてマークしますが、フォーカスを与えるとエラーは消えます。

ご協力ありがとうございました。

4

1 に答える 1

4

codeproject 作成者のカスタム コントロールを実際に使用しない限り、プリプロセッサ定義 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)

また、プロジェクトの出力ディレクトリ (.\Debug)にコピーする必要がありmyproject\myproject\Debug_dll\libhunspell\libhunspell.dllます。そうしないと、exe がそれを見つけることができません。

于 2012-03-14T14:43:58.860 に答える