概要:複雑のPInvokeの状況 - のオーバーロード機能を避ける
私はC#のから呼び出す必要がありますC関数の束を持っています。私の現在の作業ソリューションは、関数のオーバーロードに基づいており、より洗練されたソリューションがあるかどうかは疑問です。
Cのもの:ヘッダーファイル内のどこか
typedef struct _unknown_stuff * handle; // a opaque pointer
C関数
func(uint num_entries,
handle * objects,
uint * n)
{ ... }
の例関数はこれに類似する使用されるべきである。
// warning: i bet that the syntax is not correct but you should get the idea...
uint n;
func(0, null, &n);
handle * objects = malloc(n * sizeof(handle));
func(n, objects, null);
C#のようなもの:右
今私はC#で、次のやっている:そして
public struct handle
{
public IntPtr Pointer;
}
// version to get number of objects
[DllImport(dll, ...]
private static extern void
func( uint must_be_zero,
object must_be_null,
out uint n);
// version to get the actual data
[DllImport(dll, ...]
private static extern void
func( uint num_entries,
[Out] handle[] objects,
int must_be_zero);
をして:
handle[] objects;
uint n = 42;
func(0, null, out n);
objects = new handle[n];
func(n, objects, 0);
質問
ので、私はC#のnoobだ、私はこれが最善の方法であるかどうか疑問に思っていたこれを行う。特に、関数のオーバーロードを回避する方法があるかどうかを知りたいと思います。
私はちょっと恥ずかしいです... C#がポインターをサポートしているかどうかは分かりませんでした。 ポインタを使用すると、ヒントのおかげでうまくいくようです:) ライブラリをオフにしてC#の本を探しています –