-PR-
解決済み

Chasen.dllをBCB5で使う方法を教えてください(DLLの使い方)

  • すぐに回答を!
  • 質問No.71405
  • 閲覧数249
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 60% (3/5)

形態素解析ツールのChasen Win32版に付属しているchasen.dllを自作のプログラムから呼び出したいと思っています。

・茶筅
http://chasen.aist-nara.ac.jp/index.html.ja

ですが、DLLを使ったことがないのでよくわからずもう何日も困っています。

ヘッダで、まずDLL付属のヘッダー(下記参考資料)をインクルードして、

#include "chadll.h"

自作プログラムのソースで、

HINSTANCE chasenDLL = LoadLibrary("chasen.dll");
でライブラリをロードして、
char *myanalyze = (char *)GetProcAddress(chasenDLL,"analyze");
で関数analyzeを取り出していますが、

analyze()を実際に使うとシンボルの未解決エラーでコンパイルできません。

このDLLはBCBでは使えないのでしょうか。

---------------------参考資料:DLL付属のサンプルソース
/*
* dlltest.c - ChaSen dll test program
*
* Copyright (C) 2000 Nara Institute of Science and Technology
*
* Author: H.Matsuda <horosi-m@is.aist-nara.ac.jp>, Sep. 2000
*/

#include <stdio.h>
#include "chadll.h"

int main( int argc, char** argv )
{
char input[10000] = "これは形態素解析のテストです。";

set_argument_parameters( argc, argv );

printf( "%s", analyze( input ) );
}
---------------------参考資料:DLL付属のヘッダーファイル
/*
* chasendll.h - ChaSen dll header
*
* Copyright (C) 2000 Nara Institute of Science and Technology
*
* Author: H.Matsuda <horosi-m@is.aist-nara.ac.jp>, Sep. 2000
*/


__declspec( dllexport ) int set_argument_parameters( int argc, char** argv );
__declspec( dllexport ) char* analyze( char* input );
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 41% (324/772)

Chasenを使い前にDLLの使い方を勉強しましょう。
DLLの利用の仕方でStatic LinkとDynamic Linkの2通り
があることをご存じですか?

このサンプルはStatic Linkの例です。
したがってBCB5用のchasen.libというファイルが
必要になります。おそらく付属のlibファイルは
VC用でしょう。
implib.exeを使ったような気がします、、、

Dynamic Linkを使うのであれば、
typedef char* WINAPI (*TAnalyze)(char*);
TAnalyze analyze;
HINSTANCE cDLL;

cDLL = LoadLibrary("chasen.dll");
myanalyze = (TAnalyze)GetProcAddress(cDLL,"analyze");

の様に記述する必要があります。
注意としてGetProcAddress(cDLL,"xxxxxx");
のxxxxxxの部分は状況に応じて_xxxxxxとする必要が
あるかもしれません。
補足コメント
Blogger

お礼率 60% (3/5)

同じことをしたい方が後にいるときのために私の現状のメモを残させてください。

以下のようにChasen.dllを呼び出しました。すると関数を使おうとするところで、EAccessViolationが発生します。


-----------------------------------------------
void __fastcall TLogoAppForm::BitBtn1Click(TObject *Sender)
{

typedef char* WINAPI (*TAnalyze)(char*);
TAnalyze analyze;
typedef int WINAPI (*TSetArgParm)(int argc,char** argv);
TSetArgParm set_argument_parameters;

char *argv[] = {"-a", "-r"};

HINSTANCE cDLL;
char *input = "解析したい文字列";

cDLL = LoadLibrary("chasen.dll");

if (cDLL) RichEdit1->Lines->Add("LoadDLL成功");

analyze = (TAnalyze)GetProcAddress(cDLL,"analyze");
if (analyze) RichEdit1->Lines->Add("analyze関数取得成功");
set_argument_parameters = (TSetArgParm)GetProcAddress(cDLL,"set_argument_parameters");
if (set_argument_parameters) RichEdit1->Lines->Add("set_argument_parameters関数取得成功");

AnsiString StrTest;

StrTest = analyze(input);

FreeLibrary(cDLL);
投稿日時 - 2001-05-08 12:58:46
お礼コメント
Blogger

お礼率 60% (3/5)

ソースまで示していただき丁寧なご回答、本当にありがとうございました。教えていただいたコードを理解するため、DLLやポインタの参考書をひっくり返して調べておりまして御礼おくれてすみません。

なんとかおっしゃる方法で、KAKASIのDLLライブラリを動的に読み込み、動かすことができました。Chasenの方はライブラリのロードはできたのですが何らかの(chasenの使い方)の問題でまだうまく動いておりません。analyzeなど読み込んだ関数を使う場面でEAccessViolationのエラーがでてしまうのです。

とりあえずはKAKASIが動きましたのでやりたいことはできそうなのですが、Chasenが動かない状況も、勉強がてら解決したいので、もう少しがんばってみようと思います。

本当にありがとうございました!。
投稿日時 - 2001-05-07 19:51:54
関連するQ&A
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル7

ベストアンサー率 18% (4/22)

DLLにLIBファイルは付属していたでしょうか?(拡張子*.LIB) もし付属していたならば、リンクファイルに追加してください。 (VC用と書いてあったら無理ですね(笑)) もしVC用のLIBでしたら、LoadLibrary()とGetProcAdress()を使うしかないです。 これならばどのコンパイラでも使用できるはずです。 というか、先ほどのLIBファイルを使用できたとしても、こち ...続きを読む
DLLにLIBファイルは付属していたでしょうか?(拡張子*.LIB)

もし付属していたならば、リンクファイルに追加してください。
(VC用と書いてあったら無理ですね(笑))

もしVC用のLIBでしたら、LoadLibrary()とGetProcAdress()を使うしかないです。
これならばどのコンパイラでも使用できるはずです。
というか、先ほどのLIBファイルを使用できたとしても、こちらの方法で動的にリンクするほうがいいです。
お礼コメント
Blogger

お礼率 60% (3/5)

質問者です。ご回答ありがとうございます。

LIBファイルはIMPLIBでBCB版を作成してみました。その上で、プロジェクトにLIBをファイルを追加したのですが、やはり結果は同じで外部シンボルの未解決によって、だめでした。

とりあえずご指摘のように、動的リンクしかなさそうなのでそちらで試してみたいと思います。
投稿日時 - 2001-05-05 02:38:19


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ