C#, C♯, C#相談室 Part55
レス数が900を超えています。1000を超えると表示できなくなるよ。
0944デフォルトの名無しさん
2010/02/07(日) 18:35:47CALLBACKFUNCTIONの定義に__stdcallが付いていないのに、
CallBackFunctionの定義でStdCallを指定しているのはおかしい。
Cで呼出規約無指定の場合はCallingConvention.Cdecl。
若干、簡略化した上で自分でも試したが、これでうまくいった(TESTTESTの出力に成功した)ぞ。
// C(といよりboolがあるためC++と判断)
// cl test.cpp /Fet.dll /link /DLL
#include <windows.h>
typedef void (*CALLBACKFUNCTION)(const WCHAR* name);
extern "C" bool __declspec(dllexport) __stdcall TgkCoreInit(CALLBACKFUNCTION call_back)
{
call_back(L"TESTTEST"); return true;
}
// csc test.cs
using System;
using System.Runtime.InteropServices;
class c
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet=CharSet.Unicode)]
public delegate void CallBackFunction(string msg);
[DllImport("t.dll", EntryPoint="_TgkCoreInit@4")] // EntryPointは書かずにうくいっているなら不要
public extern static bool TgkCoreInit(CallBackFunction cb);
static void Main()
{
TgkCoreInit(ShowMessage);
}
static void ShowMessage(string sb)
{
Console.WriteLine(sb);
}
}
レス数が900を超えています。1000を超えると表示できなくなるよ。