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

ナビゲーションに移動 検索に移動
1,167行目: 1,167行目:
  Non-blittable generic types cannot be marshaled.
  Non-blittable generic types cannot be marshaled.
<br>
<br>
まず、以下にC++ DLLを記述する。<br>
==== Linux ====
Linux向けのC++ライブラリを記述する。<br>
<syntaxhighlight lang="c++">
// SampleLib.cpp
#include <cstdio>
#include <cstring>
using UnManagedCallback = bool (*)(int);
int __stdcall SampleCallback(UnManagedCallback CallbackFunc, int lPalam)
{
    int iRet = 0;
 
    bool bRet = CallbackFunc(lPalam);
    if(bRet)
    {
      iRet = 1;
    }
    else
    {
      iRet = -1;
    }
    return iRet;
}
</syntaxhighlight>
<br>
==== Windows ====
Windows向けのC++ DLLを記述する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  // SampleDLL.h
  // SampleDLL.h
1,214行目: 1,243行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== Linux / Windows ====
次に、C# EXEからC++ DLLを呼び出す方法を記述する。<br>
次に、C# EXEからC++ DLLを呼び出す方法を記述する。<br>
<br>
<br>
1,229行目: 1,259行目:
     class Program
     class Program
     {
     {
         [DllImport("SampleDLL.dll")]
         [DllImport("SampleDLL.dll")] // Windows
        [DllImport("SampleLib.so")]  // Linux
         private static extern int SampleCallback(ManagedCallBack CallBack, int lPalam);
         private static extern int SampleCallback(ManagedCallBack CallBack, int lPalam);


案内メニュー