質問編集履歴

2

解説不足の追記

2017/08/27 11:13

投稿

kmz_kappa
kmz_kappa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -172,8 +172,8 @@
172
172
 
173
173
 
174
174
 
175
- この結果、`resultInfo.items`の中身が全てnullという状態は改善し、中身は全て`Item`型のオブジェクトになりました。
175
+ この結果、`ResultInfo.items`(ここでは変数res)の中身が全てnullという状態は改善し、中身は全て`Item`型のオブジェクトになりました。
176
176
 
177
- しかし、`resultInto.items[0].itemid` には値が入っている状態ですが、`resultInfo.items[0].name` はnullになってしまいます。
177
+ しかし、`ResultInto.items[0].itemid` には値が入っている状態ですが、`ResultInfo.items[0].name` はnullになってしまいます。
178
178
 
179
- (本来は`resultInfo.items[0].name`には空文字列またはSJISの文字列が入り、nullが入ることはありません)
179
+ (本来は`ResultInfo.items[0].name`には空文字列またはSJISの文字列が入り、nullが入ることはありません)

1

状況が進んだため追記

2017/08/27 11:13

投稿

kmz_kappa
kmz_kappa

スコア35

test CHANGED
File without changes
test CHANGED
@@ -129,3 +129,51 @@
129
129
 
130
130
 
131
131
  ここで問題としているてtest.dllは仮の名前であり、実際はサードパーティ製のライブラリのためデバッグができません。
132
+
133
+
134
+
135
+
136
+
137
+ #### 追記 (2017.08.27 20:00)
138
+
139
+
140
+
141
+ 以下のように変更をしたら状況が進みました。
142
+
143
+
144
+
145
+ * ResultInfoクラスの定義をclassからstructに変更
146
+
147
+ * Itemクラスの定義をclassからstructに変更
148
+
149
+ * C#のTestMethodの引数を [Out]ResultInfo result → IntPtr result に変更
150
+
151
+ * 関数の呼び出し方を以下のように変更
152
+
153
+
154
+
155
+ ```cs
156
+
157
+ var resultInfo = new ResultInfo();
158
+
159
+ // var resultCode = TestFunction(resultInfo);
160
+
161
+ IntPtr p = Marshal.AllocCoTaskMem(Marshal.SizeOf(resultInfo));
162
+
163
+ Marshal.StructureToPtr(resultInfo, p, false);
164
+
165
+ var resultCode = TaskFunction(p);
166
+
167
+ ResultInfo res = (ResultInfo)Marshal.PtrToStructure(p, typeof(ResultInfo));
168
+
169
+ Marshal.FreeCoTaskMem(p);
170
+
171
+ ```
172
+
173
+
174
+
175
+ この結果、`resultInfo.items`の中身が全てnullという状態は改善し、中身は全て`Item`型のオブジェクトになりました。
176
+
177
+ しかし、`resultInto.items[0].itemid` には値が入っている状態ですが、`resultInfo.items[0].name` はnullになってしまいます。
178
+
179
+ (本来は`resultInfo.items[0].name`には空文字列またはSJISの文字列が入り、nullが入ることはありません)