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);
}
No.1
- 回答日時:
の「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()も失敗します。
ご回答ありがとうございます。
すみません。
もう少し調べてから質問すればよかったです。
でも、勉強にありました。
ありがとうございます。
No.2ベストアンサー
- 回答日時:
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")
でもできますよ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
干支のプログラム
-
TCP/IP通信型大文字・小文字変...
-
c++ 文字列を入力して、一文字...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
Visual Studio strcpyについて
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
int main()の・・・
-
double型の値をchar配列に変換...
-
switch文で文字を比較すること...
-
DPマッチング
-
int型からchar型への変換
-
文字列から空白を取り除きたい...
-
バイナリファイルをコピーする...
-
c言語でユーザ関数を利用して入...
-
C言語のポインターで詰まっている
-
C++ の FileCopy の設定が解り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報