質問編集履歴
2
解説不足の追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -172,8 +172,8 @@
|
|
172
172
|
|
173
173
|
|
174
174
|
|
175
|
-
この結果、`
|
175
|
+
この結果、`ResultInfo.items`(ここでは変数res)の中身が全てnullという状態は改善し、中身は全て`Item`型のオブジェクトになりました。
|
176
176
|
|
177
|
-
しかし、`
|
177
|
+
しかし、`ResultInto.items[0].itemid` には値が入っている状態ですが、`ResultInfo.items[0].name` はnullになってしまいます。
|
178
178
|
|
179
|
-
(本来は`
|
179
|
+
(本来は`ResultInfo.items[0].name`には空文字列またはSJISの文字列が入り、nullが入ることはありません)
|
1
状況が進んだため追記
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が入ることはありません)
|