DLL Hello class

C++/CLI Hello DLL

"C++/CLI Hello DLL" を表示する DLL を作成します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

ref DLL の作成

  1. C# Hello DLL と同じ要領なので ref object class から説明しましょう。
    プロジェクトを作成するフォルダ(例えば C:\DATA\Cpp\DLL\)を作成します。
  2. Visual Studio .NET を起動します。
    メニューから[ファイル(F)][新規作成(N)][プロジェクト(P)]を選択します。
    プロジェクトの種類は [Visual C++] を選択します。
    テンプレートは [CLR] [クラスライブラリ] を選択します。
    C:\DATA\Cpp\DLL\ のフォルダを指定してプロジェクト名(例えば Hello)で作成します。
    プロジェクトに沢山のファイルが作成されます。
  3. Hello.h に Object Class Header をタイプします。
    Object Class は Header File と Program File に分けて作成します。
    詳細は Object Class(ref class) を参照して下さい。
    // Hello.h
    
    #pragma once
    using namespace System;
    
    namespace Hello {
        public ref class Class1
        {
            // TODO: このクラスの、ユーザーのメソッドをここに追加してください。
          public:
            void MsgPrint();
        };
    }
    
  4. Hello.cpp に MsgPrint() 関数を記述します。
    // これは メイン DLL ファイルです。
    
    #include "stdafx.h"
    #include "Hello.h"
    
    namespace Hello
    {
        void Class1::MsgPrint()
        {
            Console::WriteLine(L"C++/CLI Hello DLL");
        }
    }
    
  5. ソリューションのビルドを実行すると Debug のフォルダに DLL が作成されます。
    これが目的の DLL(Dynamic Link Library) です。
    デバッグが済めば Release Mode でコンパイルして下さい。
  6. ここで作成した Hello.dll を C# から呼び出すことが出来ます。
    C#⇒C++/CLI Hello.dll を参照して下さい。

DLL を使う

  1. DLL を使用する Main のプログラムは Object Class の時と同じ要領です。
    Visual Studio .NET を起動します。
    メニューから[ファイル(F)][新規作成(N)][プロジェクト(P)]を選択します。
    プロジェクトの種類は [Visual C++] を選択します。
    テンプレートは [CLR] [CLR コンソールアプリケーション] 選択します。
    C:\DATA\Cpp\DLL\ のフォルダを指定してプロジェクト名(Console)で作成します。
    プロジェクトに沢山のファイルが作成されます。
  2. Hello.dll をプロジェクトのフォルダにコピーします。
    メニューから[プロジェクト(P)][プロパティ]を開きます。
    [共通プロパティ-参照設定]から[新しい参照の追加]を選択します。
    参照の追加から[参照]タグを選び DLL を組み込みます。
    画像は容量節約のため他のページと共有しているので、説明とは必ずしも一致しません。
    (画像では GcmLcm.dll となっていますが、Hello.dll です)

  3. Console.cpp のソースプログラムを完成します。
    Hello.h はプロジェクトに格納する必要はありません。
    // Console.cpp
    #include "stdafx.h"
    using namespace System;
    using namespace Hello;
    
    int main(array ^args)
    {
        Class1^ cls = gcnew Class1();
        cls->MsgPrint();
        System::Console::ReadLine();
        return 0;
    }
    
  4. プロジェクトを実行すると "C++/CLI Hello DLL" が表示されます。
    C++/CLI Hello DLL

value DLL の作成

  1. value class の DLL も ref class と同じ要領です。
    Visual Studio .NET から構築するのも面倒なので、ref class からプロジェクトごとコピーします。
    Hello.h の次の1行を修正して下さい。
        public ref class Class1     // ref class のとき
        public value class Class1   // value class のとき
    
  2. この修正だけで、ソリューションのビルドを実行すると DLL が作成されます。
  3. DLL を使用する Console もプロジェクトごとコピーします。
    こちらは value class の Hello.dll をプロジェクトに格納するだけでそのまま実行出来ます。
  4. 試しに Normal Mode も同じようにプログラムしてみました。
    DLL は正常に作成されたようなのですが (^_^;) 、次のエラーが表示されて実行出来ませんでした。
    エラー  1   error C2065: 'Class1' : 定義されていない識別子です。
        c:\DATA\Cpp\DLL\Normal\HelloMain\HelloMain.cpp	8	
    
    Normal Mode の DLL は DLL Normal Class を参照して下さい。

超初心者のプログラム入門(C/C++)