- PR -

Enum を再定義せずに参照させたい

1
投稿者投稿内容
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2008-08-29 03:47
あるライブラリのラッパーを書いています。
ラッパーのクライエントに、ライブラリで定義されている enum を使わせたいのですが、クライエントにライブラリのDLLを直接参照させたくはありません。ラッパーのDLLだけを参照させたいのです。

おそらくラッパー内で新たに enum をつくる必要があると思うのですが、うまくライブラリの enum を再利用することが出来るでしょうか?それとも、内容を全て再定義しなければいけないのでしょうか?

どうぞよろしくお願いします。
Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2008-08-29 07:33
その「あるライブラリ」とはどんな形態ですか?
.NETのアセンブリですか?ネイティブのDLLですか?

.NETのアセンブリであれば、TypeForwardedTo属性で逃げられるのかどうか?(使ったことはありません)

http://csharper.blog57.fc2.com/blog-entry-161.html
http://blogs.msdn.com/thottams/archive/2006/11/17/typeforwarding-typeforwardedto-attribute-in-runtime-compilerservices.aspx
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2008-09-03 04:13
.NETアセンブリです。
TypeFOrwardedTo の説明を読むと、enum も使えるとあったので、やってみました。
が、どういうわけか、クライエントのコードをコンパイルする時に「定義されて無い」とのエラーが出て、まだ成功していません。

もう少し調べてみます…。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-09-03 21:40
 難しいことを要求しているように思います。

 private.dll を参照して作った public.dll があります。アプリケーションは、public.dll だけにリンクしたい…ってことですよね?もう少し進めると、配布時には public.dll だけ配布して、private.dll は配布したくない…ということですよね?


 C/C++ だと、public.dll が private.dll を静的にリンクすれば、あるいはできるのかもしれません。.NET Framework でできるのかな?そんなこと...それが /reference オプションみたい。/r は、/reference の省略形、/t は、/target の省略形です。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2008-09-03 23:08
単に開発者にはラッパーしか参照させたくないということでしょう。
※いいからライブラリの中身は気にするな、見るな、触るな、って感じで

で、TypeForwardedToはそもそもできることが違うので使えません。
というか、はっきり言ってお望みのとおりのことはできないので、基本的にはラッパー列挙型定義するしかないでしょう。
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2008-09-04 08:10
やりたいことは、なちゃさんの言っているとおりです。public.dll, private.dll 両方提供しますが、直接参照するのは public.dll だけにして欲しい、と。

TypeForwardedToが使えるのは
client.dll -> public.dll -> private.dll
という参照関係でビルドされていて、何らかの理由で public と private を新しくする、その際に public に含まれていたクラスなり enum なりを private に移した時に client.dll をビルドしなおすことなく使いたい、というケースのようです。

最初からpublicでTypeForwardedToを宣言して、clientにpublic のみ参照させてビルドさせたいというのが希望です。2箇所で同じ内容を宣言するのは気持ち悪いのですが、やはりそうするしかないのでしょうか…。
1

スキルアップ/キャリアアップ(JOB@IT)