ページ 1 / 1
数式の文字列の処理
Posted: 2010年1月26日(火) 07:15
by Ma
x^3+12
とか
x*x/(14+x)
などの文字列を入力し、それを数式として(独自のクラス等で)管理、
さらに関数などでxに値を指定すれば答えが戻ってくる
そのようなライブラリはないでしょうか?
もちろん、自作してもいいのですが、手軽にあるのならばそちらを使いたいので。
↑で言ったことよりも多くの機能が入っていてもかまいません。
この前、同じような質問があったような気がしたのですが、見つからず。。。すいません。
知っている方がいらっしゃればリンクおねがいします。

Re:数式の文字列の処理
Posted: 2010年1月26日(火) 08:12
by SooA
Re:数式の文字列の処理
Posted: 2010年1月26日(火) 08:49
by Ma
>K-BASIC というスクリプト
読んでみようと思いましたが、dllがあったみたいなのでそちらを利用させていただくことにしました。
Vector ...検索の仕方が悪かったのかな。
ありがとうございます。
かなり意図したとおりのものでたすかりました。
ただ、気になるのは、戻り値がint 型だったことですが
まぁ、引数に*100を加えて戻ってきた値に100で割れば、細かい値が出せれるかな。
ほんとうに、ありがとうございました。

Re:数式の文字列の処理
Posted: 2010年1月26日(火) 09:16
by Ma
追記
すいません。。。LIBファイルをうまくリンクできないようです。。。
1>test.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) int __cdecl StrCalc(struct STRCALC_PARAM *)" (__imp_?StrCalc@@YAHPAUSTRCALC_PARAM@@@Z) が関数 "void __cdecl drawGrid(void)" (?drawGrid@@YAXXZ) で参照されました。
1>C:\Users\Masao\Documents\C language\calc volume\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
http://www.ne.jp/asahi/hishidama/home/t ... /dll.html#呼出方法
ここを参考にして
#pragma comment(lib, "stcalc35.lib")
#include "stcalc35.h"
このようにインクルードしました。
lib, dll,h ファイルはすべてソースファイルと同じディレクトリにおいてあります。
dllファイルは、DXライブラリ以外は初挑戦だったりします。
環境は,
VC++ 2008 Express Edition
Windows7 です。
あと、DXライブラリのようにインクルードディレクトリに、dll, h, lib ファイルがおかれているフォルダを追加しましたが、変わりありませんでした。
フォルダ構成的には
-Debug
-test.pdb
-test
-Debug
-test.objとか・・
-materials
-*.jbg とか・・
-stcalc35.dll
-StCalc35.H
-stcalc35.lib
-test.cpp
-test.vcproj
test.ncb
test.sln
test.suo
このようになってます。

Re:数式の文字列の処理
Posted: 2010年1月26日(火) 09:40
by non
試してないけど
マニュアルに
>StrCalc の関数はCの装飾名を持ちますので、C++ でコンパイルすると関数をリンクする事ができません。
と、書いてあります。
Re:数式の文字列の処理
Posted: 2010年1月26日(火) 09:49
by Ma
ほんとうですね。。。
これとDXライブラリを一緒に使うことはできないんだろうか。。。
Re:数式の文字列の処理
Posted: 2010年1月26日(火) 09:56
by たいちう
> これとDXライブラリを一緒に使うことはできないんだろうか。。。
StrCalcを呼び出すdllをCで作ればヨロシ。
試してないけど。
Re:数式の文字列の処理
Posted: 2010年1月26日(火) 10:09
by SooA
Re:数式の文字列の処理
Posted: 2010年1月26日(火) 11:07
by Ma
たいちう さん。
返事ありがとうございます。
ですがマニュアルに、指示された方法があるのでこちらをとらせていただきます。(後記)
SooAさん。
バージョンを最新のものに更新してチャレンジしてみます。
DXライブラリとの連携の前に、サンプルから動かそうと思います。
以下、dllを扱ったことがないので、いろいろ間違っているかもしれませんが、私がやってみたことです。
まずは、サンプルから動かそうと思って、新しくプロジェクトを作りました。
コンソールとして空から作成して、cppファイルを作り、マニュアルどおりのコードを以下のように記載しました。
ちなみに
(C++ で利用する場合は、StrCalc の関数を呼び出している部分を extern "C" で括ってください。)
と記載してありました。
#include <stdio.h>
extern "C"{
#include "stcalc38.h"
void main(void )
{
STRCALC_PARAM prm;
if (StrCalc_Initialize(&prm) != STATUS_NORMAL){
printf("初期化に失敗しました\n"); return;
}
prm.str = "6293 * (520 + 21)";
int ret = StrCalc(&prm);
if (ret != STATUS_NORMAL) printf("エラー:%d\n",ret);
else printf("結果:%.16G\n",prm.ans);
StrCalc_Terminate(&prm);
}
} // extern "C"
その後、このcppファイルがあるフォルダと同じところに、
stcalc38.h,stcalc38.dll,stcalc38.lib
をおきました。
ついでに、インクルードディレクトリにもこのフォルダを指定。
それでコンパイルすると
1>------ ビルド開始: プロジェクト: stringCalc, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>リンクしています...
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc_Terminate@4 が関数 _main で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc@4 が関数 _main で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc_Initialize@4 が関数 _main で参照されました。
1>C:\Users\Masao\Documents\C language\stringCalc\Debug\stringCalc.exe : fatal error LNK1120: 外部参照 3 が未解決です。
1>ビルドログは "file://c:\Users\Masao\Documents\C language\stringCalc\stringCalc\Debug\BuildLog.htm" に保存されました。
1>stringCalc - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
こんな感じです・・・。
たぶん、私が間違っているのですが、手順の間違いの指摘をよろしくおねがいします。
Re:数式の文字列の処理
Posted: 2010年1月26日(火) 11:15
by softya
リンカの入力にstcalc38.libは書きましたか?
[補足]
追加の依存ファイルにstcalc38.libと書いて下さい。

Re:数式の文字列の処理
Posted: 2010年1月26日(火) 11:22
by Ma
softya さん、ありがとうございます。(嬉
うまく成功しました。
ようやく、前に進めそうです。
次はDXライブラリとの連携に挑戦です。
成功または失敗次第、報告に来ます。

Re:数式の文字列の処理
Posted: 2010年1月26日(火) 11:25
by Ma
(*すいません、ミスで二重投稿してたみたいです。)

Re:数式の文字列の処理
Posted: 2010年1月26日(火) 12:37
by Ma
成功しました。
皆様のご協力ありがとうございました。
