● ldstr.dll
ldstr.dll について
ldstr.dll は、FLOATEX値と文字列の相互変換を行うライブラリです。
ldstr による文字列変換系は、floatex.dll がインターフェースと DLL の操作処理を持ち、機能本体は ldstr.dll が持つという、少し特殊な構成になっています。
ldstr.dll はダイナミックリンクされますので、特別なコンパイル・リンク操作は不要です。使用する時は、exe と同じ場所(floatex.dll と同じ場所)に ldstr.dll を置く必要があります。
ldstr.dll の使用は任意です。他の変換手段を用意できる場合や、文字列変換を行わないプログラムの場合は、ldstr.dll を使用しなくても問題はありません。
関数は、リファレンスの「ldstr」を参照してください。
例.
#include <stdio.h>
#include <string.h>
#include "floatex.h"
char *comma_edit(char *,char *);
#define START 1
#define END 20
int __cdecl main(void)
{
FLOATEX cap,r,n,t,rp1;
int i;
char buf1[32],buf2[64];
unsigned int oldcw;
if (!floatex_ldstr_init()){ /* ldstr.dll の初期化 */
printf("ldstr.dll がありません\n");
return 0;
}
oldcw = floatex_storecw();
floatex_loadcw(FEX_PC_64 | FEX_RC_NEAR | FEX_MCW_EM);
floatex_doubleto(50000.0,cap); /* 元金 */
floatex_doubleto(0.001,r); /* 利率 */
floatex_einc(r,rp1);
i = START;
/* 単利計算 */
do{
floatex_longto(i,n);
/* 元金 × (1 + n × 利率) */
floatex_mul(
floatex_inc(floatex_emul(n,r,t)),
cap);
floatex_int(t); /* 結果の小数点以下を切り捨てる */
floatex_ldstr_ldtoa(t,buf1); /* FLOATEX 型値を文字列に変換 */
printf("%3d : %7s\n",i,comma_edit(buf2,buf1));
}while(++i <= END);
floatex_ldstr_term(); /* ldstr の解放 */
floatex_loadcw(oldcw);
return 0;
}
/* カンマ編集 */
char *comma_edit(char *pdest,char *psrc)
{
char *ptr;
int len,cnt;
cnt = ((len = strlen(psrc) % 3) != 0)? (3 - len) : 0;
for(ptr = pdest;*psrc;psrc++){
*ptr++ = *psrc;
if (++cnt >= 3 && psrc[1]){
*ptr++ = ',';
cnt = 0;
}
}
*ptr = 0;
return pdest;
}
floatex_ldstr_init による開始処理と、floatex_ldstr_term による解放処理の間に、FLOATEX型と文字列の変換処理を記述します。これは推奨する形ですが、「ldstr系関数を使い終わったら floatex_ldstr_term を実行する」という最低限のルールに反しない限り、配置は自由です。