プロが教えるわが家の防犯対策術!

C/C++で漢字の読みを取得したいです。
kakasiで以下のようなエラーになってしまいます。
ファイルの設定は
ネット上のサンプルを参考にし、LoadLibrary・GetProcAddressなどの関数を使いました。
以下の実行時エラー・警告が出てしまいました。
どこが問題ないのか解りません。ご存知の方がおられましたら教えてください。よろしくお願いいたします。
1>------ ビルド開始: プロジェクト: oto_0714, 構成: Debug Win32 ------
1>コンパイルしています...
1>oto_0714.cpp
1>c:\users\me\documents\visual studio 2005\projects\oto_0714\oto_0714.cpp(12) : warning C4996: 'putenv': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _putenv. See online help for details.
1> c:\program files\microsoft visual studio 8\vc\include\stdlib.h(900) : 'putenv' の宣言を確認してください。
1>c:\users\me\documents\visual studio 2005\projects\oto_0714\oto_0714.cpp(13) : warning C4996: 'putenv': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _putenv. See online help for details.
1> c:\program files\microsoft visual studio 8\vc\include\stdlib.h(900) : 'putenv' の宣言を確認してください。
1>ビルドログは "file://c:\Users\me\Documents\Visual Studio 2005\Projects\oto_0714\Debug\BuildLog.htm" に保存されました。
1>oto_0714 - エラー 0、警告 2==== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include"libkakasi.h"
void main(void){
HMODULE hKakasiDLL = LoadLibrary("C:\\kakasi\\bin");
int (__cdecl *kakasi_getopt_argv)(int, char**) = (int (__cdecl *)(int, char**))GetProcAddress( hKakasiDLL, "kakasi_getopt_argv" );;
char* (__cdecl *kakasi_do)(const char*) = (char* (__cdecl *)(const char*))GetProcAddress( hKakasiDLL, "kakasi_do" );
int (__cdecl *kakasi_free)(char *p) = (int (__cdecl *)(char *p))GetProcAddress( hKakasiDLL, "kakasi_free" );
putenv( "ITAIJIDICTPATH=C:\\kakasi\\share\\kakasi\\itaijidict");
putenv( "KANWADICTPATH=C:\\kakasi\\share\\kakasi\\kanwadict");
char* argv[] = {"kakasi", "-JH","-kH"};
kakasi_getopt_argv(3,argv);
char* hiragana = kakasi_do("文");
printf("%s\n", hiragana);
kakasi_free(hiragana);
FreeLibrary(hKakasiDLL);
}

A 回答 (2件)

http://kakasi.namazu.org/index.html.ja
の「Win32用 バイナリパッケージ」のリンク先からDLですか?

kakasi-2.3.4.zipを展開して出てきたドキュメントは読みましたか?
<<< 環境設定 >>>
というセクションの中に
[ WindowsNT/2000 の環境設定 ]
というものがありましたが。(README-ja.win32というファイル)

さて、エラーとなっているputenv()がなにものかは調べましたか?
glibc向けの環境変数設定用の関数です。
cygwin環境でなければWindowsではまず使えないでしょう。
_putenv()という代替関数ならあるようです。
# まぁ、本来なら付属ドキュメントの「環境設定」に従うべきでしょう。
# kakasi、および辞書がドコにインストールされるかは固定できない(ユーザーが任意に設定できる)のですから。

あと…
>HMODULE hKakasiDLL = LoadLibrary("C:\\kakasi\\bin");
はおそらくNULL返却されますので、以降のGetProcAddress()も失敗します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
すみません。
もう少し調べてから質問すればよかったです。
でも、勉強にありました。
ありがとうございます。

お礼日時:2010/07/20 19:28

HMODULE hKakasiDLL = LoadLibrary("C:\\kakasi\\bin");


が問題ですね
kakasi-2.3.4.zipをダウンロード、展開してreadme-ja.win32を見ましたが
以下引用----------------------------------
<<< ライブラリについて >>>

このアーカイブには Win32 向けの dynamic link library と static link libraryを同梱してあります。
VC++6.0 で compile した dynamic link library は
lib\kakasi.dll と lib\kakasi.lib
です。
VC++6.0 で compile した static link library は
lib\libkakasi.lib
です。
mingw32 の gcc-2.95 で compile した static link library は
lib\libkakasi.a と lib\libkakasi.la
です。
include file は共通で
include\libkakasi.h
です。
-----------------------引用終わり
とあります
dllを使いたいなら
lib\kakasi.dll
を指定しましょう
ビルドメッセージからVisualC++と思われますがLoadLibraryで読み込まないでプロジェクトのプロパティで指定するとか
#pragma comment(lib, "C:\\kakasi\\lib\\kakasi.lib")
でもできますよ
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おかげさまで解決しました。

お礼日時:2010/07/20 19:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!