user32dll の関数によくあるようなインタフェースを実現したく思います。
たとえば user32dllに
SendInput(num, inp(0), Marshal.SizeOf(inp(0)))
って関数がありますが、これは inp(0)だけではなく、inp(0)以降の配列要素を処理するのであります。
同じような、つまり配列の始まりの要素を引数としたいのですが。
C++で (int &a)を引数とし、それをDLLにして、.NETからインポートして
実現はしましたが、
それをループで何回も呼び出ししているうちにスタック破壊を起こしてしまいました。
メモリの解放が必要だとは思うのですが、どのタイミングで実施すればよいのでしょうか。
ちなみに出来たけれども、ループしているうちにスタックを破壊したコードは以下になります。
【C++コード】
int __stdcall CPMEM(int &a, int &b, int &k)
{
int i = 0; for (i = 0; i <= k; i++){ *((&a) + i) = *((&b) + i); }
// return *((&a)+1);
return k;
}
【 .NET】
Declare Function CPMEM Lib "ConsoleApplication2.dll" (ByRef a As Integer, ByRef b As Integer, ByRef k As Integer) As Integer
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim a(5) As Integer
While True
Writehogehoge(a(0), 5) 'あるデータ内容を, 配列a へ0番目から要素5個分にわたってコピーするうな関数
End While
End Sub
Public Sub Writehogehoge(ByRef aaa As Integer, ByVal k As Integer) '配列指定はByrefにすること
Dim b() As Integer = {100, 200, 300, 400, 500}
CPMEM(aaa, b(0), k) 'ADD(a,b,c) bからaへ番地k個ぶんだけコピーする
End Sub
ちなみに、C++/CLIで同じように、CPMEM(int &a, int &b, int &k)
を作ったところ、.NETでは呼び出せないようでした。
回答2件
あなたの回答
tips
プレビュー