Search code examples
c#wrapperintptrunsigned-char

unsigned char ** equivalent in c# and have to write the return value in a file


I have to call a win32 dll function

int func1( int arg1, unsigned char **arg2, int *arg3);

and i need wrapped in c# as

public extern int fuc1(int arg1, out IntPtr arg2, out IntPtr arg3);

and i called it from a c# application as

int arg1;
IntPtr arg2 = IntPtr.Zero;
IntPtr arg3 = IntPtr.Zero;
func1(arg1,out arg2,out arg3);

Is the function declared in the c# wrapper as well as called in C# test app Correct ? Now i need to store the arg2 in a text file. How to do that.

Got answer from Hans and i wrote it in a file using

System.IO.StreamWriter(@Application.StartupPath + "\\Filename.txt");
file.WriteLine(arg2);
file.Close();

Solution

  • i have a free function in the dll to clear the memory

    Then you have a shot at making this work. The function declaration ought to look like this:

    [DllImport("foo.dll", CallingConvention = CallingConvention.Cdecl)]
    private static extern int func1(int arg1, out IntPtr arg2, ref int arg3);
    

    And you'd call it like this:

    IntPtr ptr = IntPtr.Zero;
    int dunno = 99;
    string result = null;
    
    int retval = func1(42, out ptr, ref dunno);
    if (retval == success) {
        result = Marshal.PtrToStringAnsi(ptr);
        // etc...
    }
    if (ptr != IntPtr.Zero) func1free(ptr);
    

    Where "func1free" is the otherwise undocumented function that releases the string.