- - PR -
Enum を再定義せずに参照させたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-08-29 03:47
あるライブラリのラッパーを書いています。
ラッパーのクライエントに、ライブラリで定義されている enum を使わせたいのですが、クライエントにライブラリのDLLを直接参照させたくはありません。ラッパーのDLLだけを参照させたいのです。 おそらくラッパー内で新たに enum をつくる必要があると思うのですが、うまくライブラリの enum を再利用することが出来るでしょうか?それとも、内容を全て再定義しなければいけないのでしょうか? どうぞよろしくお願いします。 |
|
投稿日時: 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 |
|
投稿日時: 2008-09-03 04:13
.NETアセンブリです。
TypeFOrwardedTo の説明を読むと、enum も使えるとあったので、やってみました。 が、どういうわけか、クライエントのコードをコンパイルする時に「定義されて無い」とのエラーが出て、まだ成功していません。 もう少し調べてみます…。 |
|
投稿日時: 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 の省略形です。 |
|
投稿日時: 2008-09-03 23:08
単に開発者にはラッパーしか参照させたくないということでしょう。
※いいからライブラリの中身は気にするな、見るな、触るな、って感じで で、TypeForwardedToはそもそもできることが違うので使えません。 というか、はっきり言ってお望みのとおりのことはできないので、基本的にはラッパー列挙型定義するしかないでしょう。 |
|
投稿日時: 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