none
VisualBasicでDLLライブラリー作成 RRS feed

  • 質問

  • 開発環境:Windows10 Visual Studio Community2019(Ver 16.11.8)

    新規に DLLライブラリー作成しようと思い
    テンプレート「クラスライブラリ (.NET Framework)」を選択しました

    が、

    テンプレートの選択が悪いのか、Framework4.6を選んでいるのが悪いのか
    System.DrawingがImports出来ません

    VisualStudioの少し前のバージョンで同様のDLLライブラリー作成しているのですが
    今の環境での現象です

    解決策をご教授ください
    2021年12月28日 5:40

回答

  • プロジェクトのプロパティ>「参照設定」タブ>参照(R)一覧の下部の「追加」ボタン>「アセンブリ」タブ>「System.Drawing」にチェックを入れてOK

    解説:Importsは参照しているDLLに定義されているクラスの名前空間を省略するというものです。DLLを参照すること自体には上記のような別手順が必要です。

    • 回答としてマーク einjyun 2021年12月28日 23:49
    2021年12月28日 5:51
  • 私の環境だと普通に効きますが…。

    1. プロジェクト新規作成で、クラスライブラリ(.NET Framework)を新規作成する。
    2. プロジェクトのプロパティでSystem.Drawingを参照追加する。
    3. Class1.vbの冒頭にImports System.Drawingを記述する。
    4. Class1.vbの中で以下のコードを書く。
    Public Class Class1
        Public Sub Test()
            Dim bmp As New Bitmap(100, 100)
            Trace.WriteLine(bmp.Width)
        End Sub
    End Class

    New の後でBitmapが候補に出ますし、Bitmap(の後で引数の説明が出ますし、bmp. でWidthを含むBitmapクラスのメンバが候補に出ます。

    // あとTrace. でもWriteLineを含むTraceクラスのSharedメンバが候補に出ます。

    • 回答としてマーク einjyun 2021年12月28日 23:48
    2021年12月28日 10:09
  • 以前作成していたときはコードの先頭で「Import ***」で参照が出来ていたのですが

    Imports ですよね?
    JScript.NET なら import ステートメントですが、VB.NET では Imports ステートメントです。

    「Imports System.Drawing」の宣言というのは DLL の参照設定とは別物です。Imports ステートメントは、名前空間を省略表記するためのものです。

    コード中で「Dim bmp As System.Drawing.Bitmap」や「System.Windows.Forms.MessageBox.Show("Test")」などと書く代わりに、名前空間を省略してクラス名だけで「Dim bmp As Bitmap」や「MessageBox.Show("Test")」などと書けるようにするのが Imports ステートメントの役目です。

    名前空間のインポートは、ファイル先頭に Imports ステートメントを使って記述しても良いですが、プロジェクト全体でよく使われる物がある場合は、プロジェクトのプロパティの「参照」タブから名前空間をプロジェクト全体に対してインポートできます。

    • 回答としてマーク einjyun 2021年12月28日 23:48
    2021年12月28日 10:19

すべての返信

  • プロジェクトのプロパティ>「参照設定」タブ>参照(R)一覧の下部の「追加」ボタン>「アセンブリ」タブ>「System.Drawing」にチェックを入れてOK

    解説:Importsは参照しているDLLに定義されているクラスの名前空間を省略するというものです。DLLを参照すること自体には上記のような別手順が必要です。

    • 回答としてマーク einjyun 2021年12月28日 23:49
    2021年12月28日 5:51
  • Hongliang 様 ありがとうございます

    「System.Drawing」は、ご教授の通りで使用できる状態となりました
    ありがとうございます

    以前作成していたときはコードの先頭で「Import ***」で参照が出来ていたのですが
    インテリセンスが効いていないことも分かりました
    インテリセンスの問題なのでしょうか?それともご教授の手順が必須なのでしょうか

    他のプログラムの編集ではインテリセンスは機能してます
    ライブラリー作成ではインテリセンスは効かないということでしょうか?
    効くのであればどのようにすればいいのでしょうかご教授ください

    2021年12月28日 9:09
  • 私の環境だと普通に効きますが…。

    1. プロジェクト新規作成で、クラスライブラリ(.NET Framework)を新規作成する。
    2. プロジェクトのプロパティでSystem.Drawingを参照追加する。
    3. Class1.vbの冒頭にImports System.Drawingを記述する。
    4. Class1.vbの中で以下のコードを書く。
    Public Class Class1
        Public Sub Test()
            Dim bmp As New Bitmap(100, 100)
            Trace.WriteLine(bmp.Width)
        End Sub
    End Class

    New の後でBitmapが候補に出ますし、Bitmap(の後で引数の説明が出ますし、bmp. でWidthを含むBitmapクラスのメンバが候補に出ます。

    // あとTrace. でもWriteLineを含むTraceクラスのSharedメンバが候補に出ます。

    • 回答としてマーク einjyun 2021年12月28日 23:48
    2021年12月28日 10:09
  • 以前作成していたときはコードの先頭で「Import ***」で参照が出来ていたのですが

    Imports ですよね?
    JScript.NET なら import ステートメントですが、VB.NET では Imports ステートメントです。

    「Imports System.Drawing」の宣言というのは DLL の参照設定とは別物です。Imports ステートメントは、名前空間を省略表記するためのものです。

    コード中で「Dim bmp As System.Drawing.Bitmap」や「System.Windows.Forms.MessageBox.Show("Test")」などと書く代わりに、名前空間を省略してクラス名だけで「Dim bmp As Bitmap」や「MessageBox.Show("Test")」などと書けるようにするのが Imports ステートメントの役目です。

    名前空間のインポートは、ファイル先頭に Imports ステートメントを使って記述しても良いですが、プロジェクト全体でよく使われる物がある場合は、プロジェクトのプロパティの「参照」タブから名前空間をプロジェクト全体に対してインポートできます。

    • 回答としてマーク einjyun 2021年12月28日 23:48
    2021年12月28日 10:19
  • Hongliangさん

    ありがとうございます

    確かめてみます

    • 回答としてマーク einjyun 2021年12月28日 23:48
    • 回答としてマークされていない einjyun 2021年12月28日 23:48
    2021年12月28日 23:46
  • 魔界の仮面弁士 様

    Importsの意味がよく分かりました

    ありがとうございます

    2021年12月28日 23:48