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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.56931 の関連記事表示

<< 0 >>
■56931  Dll作成時、1つしかファイルを読み込まない
□投稿者/ TS -(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);
    }
    }
    }
親記事 /過去ログ95より / 関連記事表示
削除チェック/

■56932  Re[1]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ 魔界の仮面弁士 -(2011/02/05(Sat) 17:59:53)
    No56931 (TS さん) に返信
    > 三つのクラスをまとめてDLLを作成した際、一つのクラスしかDLLに含まれない状態になっています。
    > makeImage.cs ReportMaker.cs sizeChanger.csの三つをビルドしてDLLにすると、
    > makeImage.csのメンバだけがDLLに含まれ、ほかのファイルで定義したクラスは含まれません。

    ソリューション エクスプローラでそれぞれのファイルを選択した時、
    『ビルド アクション』プロパティの欄に、何と表示されていますか?
記事No.56931 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56933  Re[1]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ Azulean -(2011/02/05(Sat) 18:14:37)
    そもそも、どうやってビルドしているのでしょうか?
    コマンドライン?Visual Studio の IDE?

    試した手順などあればそれも提示してください。
記事No.56931 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56934  Re[2]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ TS -(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


    宜しくお願いします。
記事No.56931 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56936  Re[3]: Dll作成時、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
記事No.56931 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56935  Re[3]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ 魔界の仮面弁士 -(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 も応答ファイルも無いので、そのパラメータ指定だと、
    名前解決されていないクラスが出てきてしまいそうですが…。
記事No.56931 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56941  Re[1]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ Azulean -(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 を表示できるものを使うとかでしょうか。
記事No.56931 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56951  Re[2]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ TS -(2011/02/06(Sun) 13:47:35)
    Azulean 様 よっしー。様

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

    明示しない限りInternalになる、というのは初耳でした。ありがとうございます。
    戻り次第試してみて結果を報告したいと思います。
記事No.56931 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56955  Re[3]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ TS -(2011/02/06(Sun) 18:59:45)
    ご回答いただいた皆様、ありがとうございました。
    ご指摘いただいたとおり、外のプロジェクトから参照することを目的としていました。
    publicにすることで解決いたしました。

    ご教授いただきありがとうございました。
    また何かありましたら、そのときは宜しくお願いします。
記事No.56931 のレス / END /過去ログ95より / 関連記事表示
削除チェック/

■56963  Re[3]: Dll作成時、1つしかファイルを読み込まない
□投稿者/ Azulean -(2011/02/07(Mon) 00:04:02)
    No56951 (TS さん) に返信
    > 明示しない限りInternalになる、というのは初耳でした。ありがとうございます。

    参考までに。


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

    > クラスと構造体のアクセシビリティ
    > 名前空間内で直接宣言された (つまり、他のクラスや構造体に入れ子にされていない) クラスと構造体には、
    > public または internal を指定できます。アクセス修飾子が指定されていない場合は、internal が既定値です。
記事No.56931 のレス / END /過去ログ95より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -