How to marshall void* with platform invoke
<p>I need to call a function from a C api contained in a dll.  Function prototype looks as follows....</p>

<pre><code>int func( char* name, void* value );
</code></pre>

<p>where the contents of the pointer value can refer to any type dependent on the passed name.  I an unsure how to set up the Dll inport to correctly marshall this void *.   Ihave been experimenting with IntPtr which seems to work whe the value is an int but I cannot retrieve values correctly for floats etc.</p>

<p>I am trying to import the function like this...</p>

<pre><code>[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func( string name, ref IntPtr value );
</code></pre>

<p>pls note that value is an output.  A pointer to a value of any type, i.e. the address in a global region of memory of a value of a known type (known to the caller).  In a c prog the caller would then be expected to cast this void * to the desired type and dereference to get the actual value stored there.   The answers given so far seem to be based around an assumption that the function will write the result to pointer location passed in.  My fault as I haven't been too specific.  Sorry.  C# is not my bag, and I don't even know if IntPtr is the way to go here...</p>
