関数ポインター(getNameFP )を持つ公開された関数(DllFunctionPoibnterGetName )を持つC ++ DLL(SimpleDLL.dll )があります。関数ポインターは、パラメーターとしてchar *を取ります(* char * name *)。
// C++
DllExport void DllFunctionPoibnterGetName( void (*getNameFP) (char * name, unsigned short * length ) ) {
char name[1024];
unsigned short length = 0 ;
getNameFP( name, &length );
printf( "length=[%d] name=[%s]\n", length, name );
}
このC++DLLを使用したいC#アプリケーションがあります。
// C#
public unsafe delegate void GetName( System.Char* name, System.UInt16* length);
unsafe class Program
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void delegateGetName(System.Char* name, System.UInt16* length);
[DllImport("SimpleDLL.dll", CharSet = CharSet.Ansi )]
public static extern void DllFunctionPoibnterGetName([MarshalAs(UnmanagedType.FunctionPtr)] delegateGetName getName);
static void Main(string[] args)
{
DllFunctionPoibnterGetName(GetName);
}
static void GetName(System.Char* name, System.UInt16* length)
{
// name = "one two three";
*length = 10;
}
}
現在、問題なく長さを設定できますが、名前を正しく設定する方法が見つからないようです。
私の質問は
- char* nameを値に正しく設定するにはどうすればよいですか。