DLLにリンクしているLIBを外部に公開

解決


閃人  2008-01-18 12:09:40  No: 67325  IP: 192.*.*.*

はじめまして、閃人と申します。

以下の構成でアプリを組んでいます。
-- 環境 --
VC++ 6, windows2000

-- 構成 --
A.exe <--link-- B.dll <--link-- C.lib, D.lib, E.lib

-- 質問 --
B.dllにlinkしているC〜E.libをA.exeからも使えるようにしたいです。

・C〜E.libは、変更できない為、クラスにDllExportは付加できない
・B.dllの定義ファイルに、装飾名でC〜E.libの必要なクラスの関数を定義すれば可能ですが、大量になる為、メンテナンスが大変。

何か簡単な方法は無いでしょうか?
アドバイス、お願い致します。

編集 削除
tetrapod  2008-01-18 14:15:49  No: 67326  IP: 192.*.*.*

やりたいことはなんとなくわかるが、原理的に無理なのであきらめよう。

A.exe に直接 C.lib 等を追加したらいいんだがそれぢゃダメ?

スタティックライブラリは[実際に使われた部分だけ]が EXE/DLL に入る仕組み
つまり[使われていない部分はリンクされずに削除される]ような仕組みになってる

だから B.dll を作る際に  C.lib などのすべての関数/変数が使われていればいいが
[B.dll では使わないが A.exe で使いたい関数/変数]があれば、
提示の方式ではそれを持ってくるすべが無いので無意味っつことになる

編集 削除
閃人  2008-01-18 14:24:18  No: 67327  IP: 192.*.*.*

アドバイスありがとうございます。

、、、やはりそうですか。

C.lib内の機能ははシングルトンを採用しているため、exeとdllの両方でリンクしてしまうと、staticなメンバはお互いに違うところを指してしまうため、不可能なのです。

メンテナンスは大変ですが、定義ファイルに装飾名を書こうと思います。
この方法で、一応動いたので。

ありがとうございました。

編集 削除
横槍  2008-01-18 16:05:38  No: 67328  IP: 192.*.*.*

LIBのスタティックリソースを、
EXEとDLLで必要となる時点で既に設計が破綻しています。

修正工数を最低限にしたいのであれば、
DLLを破棄してEXEに全部LIBとしてリンクすべきかと思います。

とか書くと「実は」とまたまた別の縛りが出てきたりして。

編集 削除