以下に示すように、Cファイルに構造体があります
struct Parameter{
char param1[20];
char param2[20];
}
また、以下に示すように、この構造体をパラメーターとして受け取り、char*を別のパラメーターとして受け取るCファイルの関数
extern "C" __declspec(dllexport) void GetValue(char* opt,struct Parameter param);
void GetValue(char* opt, struct Parameter params)
{
printf("%s", params->param1);
}
マーシャリングを使用してC#アプリケーションから呼び出したい。C#で同様の構造体を作成しました
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class Parameters
{
public string Param1 { get; set; }
public string Param1 { get; set; }
}
以下のメソッドを使用してC#で呼び出します
[DllImport(@"C:\Test\CTestDll.dll",CallingConvention = CallingConvention.Cdecl,CharSet=CharSet.Ansi)]
public static extern void GetValue([MarshalAs(UnmanagedType.LPStr)]StringBuilder sbOut, [MarshalAs(UnmanagedType.LPStruct)]Parameters sbIn);
しかし、printステートメントである結果はnullを出力します。私はCプログラミングがあまり得意ではありません。親切にそれを整理するのを手伝ってください。私が間違っているのは、C関数にあるのか、C#からのマーシャリングにあるのか