ちばです.

CRT を make していたら「'C:\Program ' のビルド方法が指定され
ていません。」などという間抜けなメッセージを出されてめげてい
るところですが,

From: Hoshino Hitoshi <zin / ffm.canon.co.jp>
Subject: [ruby-ext:00564] Re: mswin 版で /MD つけると未解決シンボル
Date: Fri, 26 Nov 1999 12:17:19 +0900

> > そう言われて気がついたのですが, 実を言うとファイルポインタを
> > 渡されて処理をする関数はそんなに大きくないので, こいつをイン
> > ライン関数かマクロにして, 各DLLがコピーを持つようにするとい
> > うのがいちばん現実的な対策かもしれないという気がしてきました.
> 
> Rubyで使用している、fread() をポインタ渡ししてDLLの内部では
> そのポインタからfread()を呼び出すという解決策はだめでしょうか。

なるほど. 実際には fread だけでなく fwrite や fseek なども渡
さなければなりませんが, そうすればみんなが同じ実体を参照する
ことができそうですね.

そう言われて思いついたのですが, ランタイムライブラリのDLL版
にしなくても, ソースに

size_t my_fread(void *buffer, size_t size, size_t count, FILE *stream)
{
    return fread(buffer, size, count, stream) ;
}

size_t my_fwrite(const void *buffer, size_t size, size_t count, FILE *stream)
{
    return fwrite(buffer, size, count, stream) ;
}

のようなコードがひたすら書いてある DLL を一個作って, f*() の
代りに my_f*() を呼べばよいのかもしれませんね.

                     ちば けいすけ <chiba / lab.imagica.co.jp>