「ライブラリの基礎 - C++DLL」の版間の差分

ナビゲーションに移動 検索に移動
564行目: 564行目:


==== サンプルコード 3 ====
==== サンプルコード 3 ====
このセクションでは、C++ DLLのコールバック関数を渡す方法を記載する。<br>
このセクションでは、C# EXEからC++ DLLへコールバック関数を渡す方法を記載する。<br>
<br>
<br>
まず、以下にC++ DLLを記述する。<br>
まず、以下にC++ DLLを記述する。<br>
616行目: 616行目:
<br>
<br>
マネージドコールバック関数を定義する。<br>
マネージドコールバック関数を定義する。<br>
以下の例では、ManagedCallbackという匿名メソッドを宣言している。<br>
以下の例では、ManagedCallBackというデリゲートを宣言している。<br>
SampleCallback関数に匿名メソッドを引数として渡すことで、既知のコールバック形式に自動的に変換される。<br>
C++ DLLのSampleCallBack関数にデリゲートを引数として渡すことで、既知のコールバック形式に自動的に変換される。<br>
  <source lang="c#">
  <source lang="c#">
  using System;
  using System;
624行目: 624行目:
  namespace ConsoleSample01
  namespace ConsoleSample01
  {
  {
    delegate bool ManagedCallBack(int x);
     class Program
     class Program
     {
     {
      [DllImport("SampleDLL.dll")]
        [DllImport("SampleDLL.dll")]
      private static extern int SampleCallback(Func<int, int> x, int y);
        private static extern int SampleCallback(ManagedCallBack CallBack, int lPalam);
 
      static void Main(string[] args)
        static void Main(string[] args)
      {
        {
          Func<int, int> ManagedCallback = (int lParam) =>
            var CallBack = new ManagedCallBack(CallBackFunction);
          {
 
            Console.Write("C++ handle is ");
            var iRet = SampleCallback(CallBack, 0);
            Console.WriteLine(lParam);
 
            Console.WriteLine($"{iRet}");
            return true;
 
          };
            Console.ReadKey();
        }
          var iRet = SampleCallback(ManagedCallback, 0);
 
      }
        public static bool CallBackFunction(int x)
        {
            Console.WriteLine($"{x}");
            return true;
        }
     }
     }
  }
  }

案内メニュー