[Mono-devel-list] Calling Native C api - Marshalling issue.

Yogendra Thakur YogendraT at ami.com
Thu Jul 28 10:15:41 EDT 2005


 
I am getting problem while executing the c library function from C#.

Following is the equivalent code .

C Code :
----------- 
 //This is the structure in C
 typedef struct MyDataType
 {
       u_int    data1;
    u_int   data2;
 } MyData;

//This is the C function which is called by passing pointer to above
structure
 function u_int DoSomeOperation(MyData* pData)
 {
  return pData->data1 +pData->data2;
 }


 C# Code  :
----------------
Following code shows how I am executing that call.

 using System;
 using System.Runtime.InteropServices;
 namespace Test
 {
  //Define equivalent class to MyData structure
  [StructLayout(LayoutKind.Sequential)]
  public class CSMyData
  {
   public UInt32 data1;
   public UInt32 data2;
  }



  public class Test
  {

   //Import the dll and define C function.
   [DllImport ("mylibrary.dll", EntryPoint="DoSomeOperation")]
   static extern Int32 OperateData( ref  CSMyData pData);
   //Other way of defining
   //static extern Int32 OperateData( [In,Out]  CSMyData pData);

   //main function for console application
   static void Main()
   {
    UInt32 result = 0;
    CSMyData inData = new CSMyData();

    inData.data1 = 0xFFFF;
    inData.data2 = 0xFF;

    result = OperateData(ref inData);

    Console.WriteLine(" Addition = " result.ToString();
   }

  }

}


Issue:
--------
When I am printing value in the  C code side ,ie  in DoSomeOperation
function , the values are corrupted.

Please let me know what part is wrong.

regards,
Yogi



More information about the Mono-devel-list mailing list