Cランタイムに依存する "オブジェクト"(FILE *、mallocによって返されるポインタなど)を渡す問題を扱うdllのためのC APIを設計する最良の方法は何ですか? 。たとえば、2つのDLLがランタイムの異なるバージョンにリンクされている場合、私の理解は、FILE *を1つのDLLから他のDLLに安全に渡すことができないことです。Cランタイムオブジェクト、dll境界
Windows依存のAPIを使用する唯一のソリューション(DLL間で動作することが保証されています)はありますか? C APIはすでに存在して成熟していますが、主にUnix POVから設計されています(もちろんUNIX上で動作する必要があります)。
私はこの問題の答えを求めています:)私は、既存のC API(署名などのFILE *)を変更することを想定していないソリューションを期待していましたが、同じCランタイムとリンクするためのすべてを保証できない場合はどうですか? 問題は理論的にはUnixでも同じですが、Cランタイムが1つしかないため問題になることはほとんどありません。ライブラリ間のファイル記述子をFILE *に渡すという問題は一度もありませんでした。多くのC APISはこのように設計されており、これらのOSで完璧に動作します。 –
APIの署名にFILE *があることが良い習慣ではない場合、ファイルストリームをどう扱うのですか?あなたが呼び出すdllがfprintfとFILE *を期待する他の関数を内部的に呼び出すいくつかの関数を持っている場合、ファイルをオープンして閉じる関数をエクスポートする必要がありますか? –
私は解決策を提案しました:) CRTに静的にリンクしないでください。 MSVCRT.DLLへのリンク。 Linux、Unix、またはMAC上のCRTライブラリがすべて問題なく動作することが保証されていれば、私はかなり驚いています。私はあなたもそこに幸運だったと思う。 – Foredecker