13,230
回編集
| 1,167行目: | 1,167行目: | ||
Non-blittable generic types cannot be marshaled. | Non-blittable generic types cannot be marshaled. | ||
<br> | <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); | ||