2010-12-27 7 views
0

私は、非マインドCのDLLからC#で関数を使用しようとしています。私はC#の初心者です。これを正しく実行しているかどうかは不明です。 C関数は次のようなものになります。c dll関数をc#にインポートする

unsigned short Function(unsigned short, unsigned long, unsigned long, unsigned short*); 


[DllImport("cDLLfile.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] 
private static extern short Function(ushort a, UInt32 b, UInt32 c, IntPtr buffer); 

をバッファは、私は関数に渡すためにしようとすると、エラーを取得しています、配列を埋める

ushort[] = new ushort[7]; 

ような配列のものです。私はIntPtrが正しくないことを知っています。これを行う正しい方法は何ですか?

+0

エラーが表示されますか? – pstrjds

+2

http://stackoverflow.com/questions/289076/how-can-i-pass-a-pointer-to-an-array-using-p-invoke-in-cの複製と思われる –

答えて

2

それはあなたの配列をマーシャリングする方法の詳細およびサンプルコードを見つけますUSHORT []

[DllImport("cDLLfile.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true) ] 
private static extern short Function(ushort a, UInt32 b, UInt32 c, ushort[] buffer); 
+2

正確なスペルを避けるため、C関数は通常_Functionとしてエクスポートされます。 CallingConventionは必須です、Cdecl。 –

0

はこれを試してみてください:

extern short Function(ushort a, UInt32 b, UInt32 c, ushort[] buffer) 
+0

いいえ、ドンそれを試してはいけない。それはポインタへのポインタ(つまり、 'ushort **')を与えます。 –

+0

@ジムあなたの正しい、私の悪い... ushort []を修正する必要があります。 – pstrjds

0

Hereで動作するはずです。

関連する問題