CS⇒Win32DLL

Win32 で作成した DLL を C# から呼び出します。

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

プロジェクトの説明

  1. C++/CLI のマネージドモードで作成した DLL は、既に説明したように C# から直接呼び出すことが出来ます。
    ref mode(Class 登録)の場合は C#⇒C++/CLI DLL を参照して下さい。
    Normal Mode(関数登録)の場合は C#⇒DLL(HelloMsg) を参照して下さい。
    所が Win32 で作成した DLL を、そのまま C# のプロジェクトに格納するとエラーが表示されます。
    'C:\DATA\C#\DLL\Hello.dll' への参照を追加できませんでした。
    ファイルにアクセスできて、有効なアセンブリであること、または COM コンポーネント
    であることを確認してください。
    
    (エラーメッセージの C:\DATA\C#\DLL\Hello.dll は C# のプロジェクトのフォルダーです)
  2. 幸いにして Win32 で作成した DLL は C++/CLI のマネージドモードに組み込むことが出来るようなので、 Win32 DLL(LIB) を組み込んだマネージドモードの DLL を経由して C# から呼び出します。
    Win32 で作成した DLL はネイティブコードなので、処理速度で有利かも知れませんが、あまりお勧め出来ません。
    最も解りやすいのは ref mode を使って直接 DLL を作成する方法でしょう。
  3. ここでは Win32 DLL(LIB) をラップしてマネージドモードの DLL を作成する方法を説明します。
    最初に Win32 で Hello.lib(Hello.dll) を作成します。
    DLL(LIB) の作成方法は、これまでのページを参照して下さい。
    Hello.lib(Hello.dll) のヘッダーファイル Hello.h です。
    //Hello.h
    void HelloMsg(); 
    
    Hello.lib(Hello.dll) のプログラムファイル Hello.cpp です。
    //Hello.cpp
    #include <stdio.h>
    #include "Hello.h"
    
    void HelloMsg()
    {
        printf("Hello Function DLL\n");
    }
    
  4. Hello.lib(Hello.dll) をラップして Wrapper.dll を作成するプロジェクトです。
    Visual Studio .NET を起動して「空の CLR プロジェクト」を選択します。
    プロジェクトの名前は Wrapper にして下さい。

    プロジェクトのプロパティで [構成プロパティ][全般ページ]から構成の種類をダイナミックライブラリ(.dll)に設定します。
    文字セットは「Unicode 文字セットを使用する」です。

  5. Win32 で作成した Hello.lib と Hello.h をプロジェクトのフォルダーに格納します。
    Wrapper.h と Wrapper.cpp を格納してプロジェクトに加えます。
  6. Hello.lib をラップしてマネージドモードの DLL を作成するヘッダーファイル Wrapper.h です。
    // Wrapper.h 
    #pragma once 
    using namespace System; 
    
    namespace Wrapper 
    { 
        public ref class Wrap 
        { 
          public: 
            void func(); 
        }; 
    } 
    
  7. マネージドモードの DLL を作成するプログラムファイル Wrapper.cpp です。
    #pragma で "Hello.lib" を組み込んでいます。
    //Wrapper.cpp 
    #include "Hello.h"
    #include "Wrapper.h" 
    #pragma comment(lib,"Hello.lib")
    using namespace System; 
    
    namespace Wrapper
    {
        void Wrap::func() 
        {
            HelloMsg(); 
        }
    } 
    
  8. ソリューションのビルドを実行すると Wrapper.dll が作成されます。
    これが目的の DLL ファイルです。
    Wrapper.dll を C# から呼び出す方法は C#⇒C++/CLI DLL を参照して下さい。
    Hello.dll が Wrapper.dll に変わっただけで、同じようにプログラム出来ます。
    Wrapper.dll の仕様です。
    プラットホームターゲット(G)から x86 を選択して下さい。
    名前 説明
    Wrapper Wrapper.dll の namespace の名前
    Wrap Object Class の名前
    void func() "Hello Function DLL\n" を印字するメソッド

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