回答編集履歴
1
二次元化
test
CHANGED
@@ -1,48 +1,67 @@
|
|
1
|
-
|
1
|
+
二次元配列だ、と言う話なので。
|
2
|
-
|
3
2
|
こういうDLLをつくって、
|
4
3
|
```C
|
5
4
|
#include <windows.h>
|
6
5
|
#include <stdio.h>
|
6
|
+
|
7
7
|
// NPOS_DETAIL_UPD2の定義を省略
|
8
8
|
__declspec(dllexport) int __stdcall Esql_UpNonPos
|
9
|
-
|
9
|
+
(void *lpHeader, int *nIndexNum, NPOS_DETAIL_UPD2 *lpDetail)
|
10
10
|
{
|
11
|
-
NPOS_DETAIL_UPD2 npos;
|
12
|
-
|
11
|
+
int ii,jj;
|
13
|
-
|
12
|
+
for(ii=0; ii<nIndexNum[0]; ii++) {
|
14
|
-
|
13
|
+
for (jj = 0; jj < nIndexNum[1]; jj++) {
|
15
|
-
|
16
|
-
|
14
|
+
printf("%d,%d=%S\n", ii, jj, lpDetail[ii * nIndexNum[1] + jj].szFunctionFlag);
|
15
|
+
wchar_t msg[128];
|
16
|
+
int len = swprintf_s(msg, sizeof(msg), L"cd%d.%d", ii, jj);
|
17
|
+
if (lpDetail[ii * nIndexNum[1] + jj].szFunctionFlag) SysFreeString(lpDetail[ii * nIndexNum[1] + jj].szFunctionFlag);
|
18
|
+
lpDetail[ii*nIndexNum[1] + jj].szFunctionFlag = SysAllocStringLen(msg, len ); //
|
17
|
-
|
19
|
+
}
|
20
|
+
}
|
18
21
|
return 0;
|
19
22
|
}
|
23
|
+
|
20
24
|
```
|
21
25
|
|
22
26
|
こういう呼び出しをすると
|
23
27
|
```vb
|
28
|
+
<DllImport("m.dll", CharSet:=CharSet.Unicode)>
|
24
|
-
Public Shared Function Esql_UpNonPos(<[In]()> ByVal Up_dtpPSHead As System.IntPtr, By
|
29
|
+
Public Shared Function Esql_UpNonPos(<[In]()> ByVal Up_dtpPSHead As System.IntPtr, <[In]()> ByVal RecordCnt() As Integer, <[In](), [Out]()> ByVal Up_dtpNonPosDet() As tpNonPosDet2) As Integer
|
25
30
|
End Function
|
26
31
|
|
27
32
|
Public Shared Sub Main(args() As String)
|
28
|
-
Dim det(
|
33
|
+
Dim det2d(2, 4) As tpNonPosDet2
|
29
|
-
|
34
|
+
For i As Integer = 0 To det2d.GetLength(0) - 1
|
35
|
+
For j As Integer = 0 To det2d.GetLength(1) - 1
|
36
|
+
det2d(i, j).strShoriFlg = String.Format("det{0}.{1}", i, j)
|
37
|
+
Next
|
38
|
+
Next
|
30
39
|
|
40
|
+
Dim dims() As Integer = New Integer() {det2d.GetLength(0), det2d.GetLength(1)}
|
41
|
+
Dim det(dims(0) * dims(1)) As tpNonPosDet2
|
42
|
+
System.Console.WriteLine("dim {0}x{1}", dims(0), dims(1))
|
43
|
+
|
31
|
-
For i As Integer = 0 To det.Length - 1
|
44
|
+
For i As Integer = 0 To det2d.GetLength(0) - 1
|
45
|
+
For j As Integer = 0 To det2d.GetLength(1) - 1
|
32
|
-
det(i).strShoriFlg = "
|
46
|
+
det(i * dims(1) + j).strShoriFlg = String.Format("det{0}.{1}", i, j)
|
47
|
+
Next
|
33
48
|
Next
|
49
|
+
|
34
|
-
Esql_UpNonPos(System.IntPtr.Zero,
|
50
|
+
Esql_UpNonPos(System.IntPtr.Zero, dims, det)
|
51
|
+
|
52
|
+
For i As Integer = 0 To dims(0) - 1
|
53
|
+
For j As Integer = 0 To dims(1) - 1
|
54
|
+
det2d(i, j) = det(i * dims(1) + j)
|
55
|
+
System.Console.WriteLine(det2d(i, j).strShoriFlg)
|
56
|
+
Next
|
57
|
+
Next
|
35
58
|
End Sub
|
36
59
|
```
|
37
60
|
こういう結果になります。
|
61
|
+
> dim 3x5
|
62
|
+
> 0,0=det0.0
|
38
|
-
>
|
63
|
+
> ...
|
39
|
-
>helo1
|
40
|
-
>helo2
|
41
|
-
>helo3
|
42
|
-
>
|
64
|
+
> 2,4=det2.4
|
43
|
-
>helo5
|
44
|
-
>helo6
|
45
|
-
>helo7
|
46
|
-
>helo8
|
47
|
-
>helo9
|
48
|
-
>
|
65
|
+
> cd0.0
|
66
|
+
> ...
|
67
|
+
> cd2.4
|