- ふらっと C#,C♯,C#(初心者用) Part123 [無断転載禁止]©2ch.net
155 :デフォルトの名無しさん[sage]:2016/08/05(金) 16:28:54.03 ID:Vnpr4HzA - C#からC++で書かれたDLLへのアクセスについて質問です。以下のようなコードなのですが、C#からアクセスした場合、hoge.hoge2 がセットされません。どこが悪いのでしょうか?
[C++側(DLL)] typedef struct { wchar_t hoge1[256]; wchar_t hoge2[256]; } HOGE; bool __stdcall func(HOGE* hoge) { wcscpy_s(hoge->hoge1, 256, L"HOGE1"); wcscpy_s(hoge->hoge2, 256, L"HOGE2"); return true; } [C#側] [StructLayout(LayoutKind.Sequential)] public struct HOGE { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public Char[] hoge1; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public Char[] hoge2; } [DllImport("hoge.dll", EntryPoint = "func")] public static extern bool func(int index, ref HOGE hoge); hoge = new HOGE(); hoge.hoge1 = new Char[256]; hoge.hoge2 = new Char[256]; bool res = func(0, ref hoge); hoge.hoge1 は "HOGE1"がセットされている。hoge.hoge2 は なにもセットされていない???
| - ふらっと C#,C♯,C#(初心者用) Part123 [無断転載禁止]©2ch.net
157 :デフォルトの名無しさん[sage]:2016/08/05(金) 17:04:53.51 ID:Vnpr4HzA - [C#側]
public static extern bool func(ref HOGE hoge); でした。
|
|