質問編集履歴
4
ご指摘頂いたポイントの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -78,7 +78,7 @@
|
|
78
78
|
|
79
79
|
{
|
80
80
|
|
81
|
-
arrayLength = (int)Marshal.PtrToStructre(ptr, typeof(int));
|
81
|
+
arrayLength = (int)Marshal.PtrToStructure(ptr, typeof(int));
|
82
82
|
|
83
83
|
ptr += sizeof(int);
|
84
84
|
|
@@ -88,7 +88,7 @@
|
|
88
88
|
|
89
89
|
{
|
90
90
|
|
91
|
-
dArray[idx].arrayId = (int)Marshal.PtrToStructre(ptr, typeof(int));
|
91
|
+
dArray[idx].arrayId = (int)Marshal.PtrToStructure(ptr, typeof(int));
|
92
92
|
|
93
93
|
ptr += sizeof(int);
|
94
94
|
|
@@ -122,7 +122,7 @@
|
|
122
122
|
|
123
123
|
// ptrには、DLLの受け取りたいAの先頭ポインタが入ります
|
124
124
|
|
125
|
-
public GetA(IntPtr ptr)
|
125
|
+
public void GetA(IntPtr ptr)
|
126
126
|
|
127
127
|
{
|
128
128
|
|
3
C#側のプログラムにミスがあったため修正・ご指摘頂いた件について追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -126,9 +126,9 @@
|
|
126
126
|
|
127
127
|
{
|
128
128
|
|
129
|
-
private A = new A();
|
129
|
+
private A a = new A();
|
130
130
|
|
131
|
-
|
131
|
+
a.Setup(ptr);
|
132
132
|
|
133
133
|
}
|
134
134
|
|
@@ -147,3 +147,11 @@
|
|
147
147
|
マーシャリングやC++自体不慣れでポインタ等の知識が不足している状態ですが、
|
148
148
|
|
149
149
|
何卒よろしくお願い致します。
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
《追記》
|
154
|
+
|
155
|
+
dArrayのそれぞれの要素の実体メモリ部分はnewで割り当てた別のところにあるのに、C#側でシーケンシャルなアクセスをしているからでは?というご指摘を頂き、恐らくこちらが原因だと思われます。
|
156
|
+
|
157
|
+
ただ、C#でunsafeを使うことで、ポインタを使用することができるとは思うのですが、Marshal.PtrToStructure()でポインタをマーシャリングする事ができませんでした。 もし、DLL側からポインタを受け取って、そのポインタを使用してその箇所の値にアクセスする手段がありましたら、ぜひご教授頂けないでしょうか?何卒、よろしくお願い致します。
|
2
構造体Aのデータ設定処理再追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -35,6 +35,10 @@
|
|
35
35
|
public void SetupA(A* a, int length)
|
36
36
|
|
37
37
|
{
|
38
|
+
|
39
|
+
a->arrayLength = length;
|
40
|
+
|
41
|
+
|
38
42
|
|
39
43
|
a->dArray = new DynamicArray[length];
|
40
44
|
|
1
C++側の構造体Aのデータ設定処理追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -25,6 +25,28 @@
|
|
25
25
|
int arrayId;
|
26
26
|
|
27
27
|
float arrayVal;
|
28
|
+
|
29
|
+
}
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
// 構造体Aのデータ設定
|
34
|
+
|
35
|
+
public void SetupA(A* a, int length)
|
36
|
+
|
37
|
+
{
|
38
|
+
|
39
|
+
a->dArray = new DynamicArray[length];
|
40
|
+
|
41
|
+
for(int idx = 0; idx < length; idx++)
|
42
|
+
|
43
|
+
{
|
44
|
+
|
45
|
+
a->dArray[idx].arrayId = idx;
|
46
|
+
|
47
|
+
a->dArray[idx].arrayVal = idx % 1.5f;
|
48
|
+
|
49
|
+
}
|
28
50
|
|
29
51
|
}
|
30
52
|
|