Convert IntPtr to int* in C#?

user20493 picture user20493 · May 6, 2009 · Viewed 11.5k times · Source

I have a C++ DLL returning an int* to a C# program. The problem is the int* in C# remains null after the assignment.

When I assign the C++ result to an IntPtr, I get a correct non-null value. However any attempt to convert this to an int* results in null.

I've tried:

IntPtr intp = cppFunction ();           // Non-null.

int* pi = (int *) intp;                 // Results in null.

int* pi = (int *) intp.ToPointer ();    // Results in null.


void* vp = intp.ToPointer ();

int* pi = (int *) vp;                   // Results in null, but vp is non-null.

How can I get a non-null int* ?

Thanks! Alan

Answer

James Black picture James Black · May 6, 2009

You cppFunction declaration should be something like:

void cppFunction(ref int* ptr) {
   ptr = somevalue;
}

That should solve your problem.

You may find this useful also: http://www.pcreview.co.uk/forums/thread-2902012.php