質問するログイン新規登録

質問編集履歴

2

解説不足の追記

2017/08/27 11:13

投稿

kmz_kappa
kmz_kappa

スコア35

title CHANGED
File without changes
body CHANGED
@@ -85,6 +85,6 @@
85
85
  Marshal.FreeCoTaskMem(p);
86
86
  ```
87
87
 
88
- この結果、`resultInfo.items`の中身が全てnullという状態は改善し、中身は全て`Item`型のオブジェクトになりました。
88
+ この結果、`ResultInfo.items`(ここでは変数res)の中身が全てnullという状態は改善し、中身は全て`Item`型のオブジェクトになりました。
89
- しかし、`resultInto.items[0].itemid` には値が入っている状態ですが、`resultInfo.items[0].name` はnullになってしまいます。
89
+ しかし、`ResultInto.items[0].itemid` には値が入っている状態ですが、`ResultInfo.items[0].name` はnullになってしまいます。
90
- (本来は`resultInfo.items[0].name`には空文字列またはSJISの文字列が入り、nullが入ることはありません)
90
+ (本来は`ResultInfo.items[0].name`には空文字列またはSJISの文字列が入り、nullが入ることはありません)

1

状況が進んだため追記

2017/08/27 11:13

投稿

kmz_kappa
kmz_kappa

スコア35

title CHANGED
File without changes
body CHANGED
@@ -63,4 +63,28 @@
63
63
 
64
64
  ### その他
65
65
 
66
- ここで問題としているてtest.dllは仮の名前であり、実際はサードパーティ製のライブラリのためデバッグができません。
66
+ ここで問題としているてtest.dllは仮の名前であり、実際はサードパーティ製のライブラリのためデバッグができません。
67
+
68
+
69
+ #### 追記 (2017.08.27 20:00)
70
+
71
+ 以下のように変更をしたら状況が進みました。
72
+
73
+ * ResultInfoクラスの定義をclassからstructに変更
74
+ * Itemクラスの定義をclassからstructに変更
75
+ * C#のTestMethodの引数を [Out]ResultInfo result → IntPtr result に変更
76
+ * 関数の呼び出し方を以下のように変更
77
+
78
+ ```cs
79
+ var resultInfo = new ResultInfo();
80
+ // var resultCode = TestFunction(resultInfo);
81
+ IntPtr p = Marshal.AllocCoTaskMem(Marshal.SizeOf(resultInfo));
82
+ Marshal.StructureToPtr(resultInfo, p, false);
83
+ var resultCode = TaskFunction(p);
84
+ ResultInfo res = (ResultInfo)Marshal.PtrToStructure(p, typeof(ResultInfo));
85
+ Marshal.FreeCoTaskMem(p);
86
+ ```
87
+
88
+ この結果、`resultInfo.items`の中身が全てnullという状態は改善し、中身は全て`Item`型のオブジェクトになりました。
89
+ しかし、`resultInto.items[0].itemid` には値が入っている状態ですが、`resultInfo.items[0].name` はnullになってしまいます。
90
+ (本来は`resultInfo.items[0].name`には空文字列またはSJISの文字列が入り、nullが入ることはありません)