C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Dll作成時、1つしかファイルを読み込まない


(過去ログ 95 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■56931 / inTopicNo.1)  Dll作成時、1つしかファイルを読み込まない
  
□投稿者/ TS (1回)-(2011/02/05(Sat) 17:52:12)

分類:[C#] 

開発環境 Visual Studio 2005
言語 C#.net

初めて質問させていただきます。宜しくお願いします。
三つのクラスをまとめてDLLを作成した際、一つのクラスしかDLLに含まれない状態になっています。
makeImage.cs ReportMaker.cs sizeChanger.csの三つをビルドしてDLLにすると、makeImage.csのメンバだけがDLLに含まれ、ほかのファイルで定義したクラスは含まれません。

http://msdn.microsoft.com/ja-jp/library/fhws7t7b(v=vs.80).aspx
Microsoftから提供されている上記のサンプルでは、両方のファイルともDLLに含まれました。
同じ文法で上記3ファイルについて試したところ、やはりmakeImage.csのみがDLLに含まれました。

最終的に、一つのDLLに上記3ファイルで定義したクラスを含めたいと思っています。
調べても問題点が分からず、質問させていただきました。
お詳しい方、どうかご教授を願います。

以下、ファイルの内容です。

*****************************makeImage.cs*************************************
namespace myPicturePicker
{
public class MakeImage
{
Bitmap bmp;
public MakeImage() {

}

public string CreateImage() {
bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(new Point(0, 0), new Point(0, 0), bmp.Size);
g.Dispose();
string fname="test";
string fext=".jpg";
int i=1;
while(File.Exists(fname+i.ToString()+fext)){
i++;
}
bmp.Save(fname + i.ToString() + fext,System.Drawing.Imaging.ImageFormat.Jpeg);
return (fname + i.ToString() + fext);
}
}
}

***************************sizeChanger.cs*********************************
namespace myPicturePicker
{
class sizeChanger
{
private int imgWidth=0;
private int imgHeight=0;


public sizeChanger() {

}
public sizeChanger(int hei, int wid,int dpi) {
imgHeight =changeMMtoPixel(hei,dpi); imgWidth = changeMMtoPixel(wid,dpi);
}

public string changeImagesize(string imgpath) {
Bitmap bmp = new Bitmap(imgpath);
bmp=ResizeImage(bmp, imgWidth, imgHeight);
bmp.Save(imgpath,System.Drawing.Imaging.ImageFormat.Jpeg);
return (imgpath);
}
private Bitmap ResizeImage(Bitmap image, double dw, double dh)
{
double hi;
double imagew = image.Width;
double imageh = image.Height;

if ((dh / dw) <= (imageh / imagew))
{
hi = dh / imageh;
}
else
{
hi = dw / imagew;
}
int w = (int)(imagew * hi);
int h = (int)(imageh * hi);

Bitmap result = new Bitmap(w, h);
Graphics g = Graphics.FromImage(result);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(image, 0, 0, result.Width, result.Height);

return result;
}

private int changeMMtoPixel(int mm, int dpi) {
const double sInch = 25.4;

return ((int)((double)mm / sInch * (double)dpi));
}

}
}


*******************ReportMaker.cs******************************

namespace myPicturePicker
{
class ReportMaker
{
public MakeImage mi;
public sizeChanger szc;
string imgHeight, imgWidth,imgDPI;
string imgPath="";

public ReportMaker(){
StreamReader sr = new StreamReader("settings.ini",Encoding.GetEncoding("Shift-jis"));
this.imgHeight = sr.ReadLine();
this.imgWidth = sr.ReadLine();
this.imgDPI = sr.ReadLine();
this.mi = new MakeImage();
this.szc = new sizeChanger(int.Parse(this.imgHeight), int.Parse(this.imgWidth), int.Parse(this.imgDPI));
sr.Dispose();
}

public string generateReport(string strImg) {

return (strImg);
}

public void imageMake() {
this.imgPath = mi.CreateImage();
}
public void sizeChange() {
this.imgPath = szc.changeImagesize(this.imgPath);
}
}
}
引用返信 編集キー/
■56932 / inTopicNo.2)  Re[1]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ 魔界の仮面弁士 (2056回)-(2011/02/05(Sat) 17:59:53)
No56931 (TS さん) に返信
> 三つのクラスをまとめてDLLを作成した際、一つのクラスしかDLLに含まれない状態になっています。
> makeImage.cs ReportMaker.cs sizeChanger.csの三つをビルドしてDLLにすると、
> makeImage.csのメンバだけがDLLに含まれ、ほかのファイルで定義したクラスは含まれません。

ソリューション エクスプローラでそれぞれのファイルを選択した時、
『ビルド アクション』プロパティの欄に、何と表示されていますか?
引用返信 編集キー/
■56933 / inTopicNo.3)  Re[1]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ Azulean (684回)-(2011/02/05(Sat) 18:14:37)
そもそも、どうやってビルドしているのでしょうか?
コマンドライン?Visual Studio の IDE?

試した手順などあればそれも提示してください。
引用返信 編集キー/
■56934 / inTopicNo.4)  Re[2]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ TS (2回)-(2011/02/05(Sat) 18:42:02)
魔界の仮面弁士 様 Azulean 様
早速の返信ありがとうございます。
・ビルドアクションプロパティには、3ファイルとも「コンパイル」と表示されています。

・ビルドの方法は、Visual Studio のIDEとコマンドライン、両方試しました。
IDEでは、プロジェクトをデバックモードにし、「プロジェクトのビルド」を行いました。ビルドは正常に終了していますが、上記の問題が出ています。
ビルドごとにクリーンをしています。
コマンドラインでは、以下のコマンドを実行しました。

csc /target:library /out:makeReport.dll makeReport.cs makeImage.cs sizeChanger.cs


宜しくお願いします。
引用返信 編集キー/
■56935 / inTopicNo.5)  Re[3]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ 魔界の仮面弁士 (2057回)-(2011/02/05(Sat) 18:59:42)
No56934 (TS さん) に返信
> ・ビルドアクションプロパティには、3ファイルとも「コンパイル」と表示されています。
であれば、問題無く
 public class MakeImage
 internal class ReportMaker
 internal class sizeChanger
の 3 つを持った DLL が出来そうなものですけれどね…。


> csc /target:library /out:makeReport.dll makeReport.cs makeImage.cs sizeChanger.cs

ReportMaker.cs は何処に行ったのでしょうか?
それに、using も応答ファイルも無いので、そのパラメータ指定だと、
名前解決されていないクラスが出てきてしまいそうですが…。
引用返信 編集キー/
■56936 / inTopicNo.6)  Re[3]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ よっし〜。 (1回)-(2011/02/05(Sat) 19:08:19)
2011/02/05(Sat) 19:11:08 編集(投稿者)
2011/02/05(Sat) 19:11:03 編集(投稿者)

はじめまして。
試していないので恐縮ですが、
以下二つのクラスの定義に、publicを付けて再度DLLを作成してみてください。

class ReportMaker
class sizeChanger

引用返信 編集キー/
■56941 / inTopicNo.7)  Re[1]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ Azulean (685回)-(2011/02/06(Sun) 00:25:14)
こっちも聞いておくべきでした。

No56931 (TS さん) に返信
> 三つのクラスをまとめてDLLを作成した際、一つのクラスしかDLLに含まれない状態になっています。
> makeImage.cs ReportMaker.cs sizeChanger.csの三つをビルドしてDLLにすると、makeImage.csのメンバだけがDLLに含まれ、
> ほかのファイルで定義したクラスは含まれません。

どうやってそれを確かめましたか?
ILDASM?参照設定の追加?


明示的にクラスの可視性を指定しなかった場合、C# の場合は internal 扱いです。
internal は基本的にそのプロジェクトでしか使えないことを示すので、確認する方法によっては「含まれていない」と見えるかもしれませんね。

単に外のプロジェクトからも参照したいのであれば、public を指定すれば良いですし、internal でも含まれていることを確認したいのであれば ILDASM とか、internal を表示できるものを使うとかでしょうか。
引用返信 編集キー/
■56951 / inTopicNo.8)  Re[2]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ TS (1回)-(2011/02/06(Sun) 13:47:35)
Azulean 様 よっしー。様

ご回答ありがとうございます。
・含まれていないことの確認は、参照設定の追加から確認するほか、別のプロジェクトに呼び出してみて確認しました。

明示しない限りInternalになる、というのは初耳でした。ありがとうございます。
戻り次第試してみて結果を報告したいと思います。
引用返信 編集キー/
■56955 / inTopicNo.9)  Re[3]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ TS (3回)-(2011/02/06(Sun) 18:59:45)
ご回答いただいた皆様、ありがとうございました。
ご指摘いただいたとおり、外のプロジェクトから参照することを目的としていました。
publicにすることで解決いたしました。

ご教授いただきありがとうございました。
また何かありましたら、そのときは宜しくお願いします。
解決済み
引用返信 編集キー/
■56963 / inTopicNo.10)  Re[3]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ Azulean (686回)-(2011/02/07(Mon) 00:04:02)
No56951 (TS さん) に返信
> 明示しない限りInternalになる、というのは初耳でした。ありがとうございます。

参考までに。


アクセス修飾子 (C# プログラミング ガイド)
http://msdn.microsoft.com/ja-jp/library/ms173121.aspx

> クラスと構造体のアクセシビリティ
> 名前空間内で直接宣言された (つまり、他のクラスや構造体に入れ子にされていない) クラスと構造体には、
> public または internal を指定できます。アクセス修飾子が指定されていない場合は、internal が既定値です。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -