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