Advertisement
Guest User

C#_interop_Nim3

a guest
Nov 6th, 2015
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *** C# ***
  2.  
  3.     public struct NimT
  4.     {
  5.       public uint Val1;
  6.       public uint Val2;
  7.       public uint Val2;
  8.     }
  9.  
  10.     [Dllimport("DllPath", CallingConvention = CallingConvention.Cdecl)]
  11.     public static extern void populateArraySruct(uint length, NimT** ArrayStructs)
  12.  
  13.  
  14.     public static unsafe List<NimT> PopulateLstPackNim(int ArrL)
  15.     {
  16.         NimT* PackUArrOut = null;
  17.         List<NimT> RtPackLst = new List<NimT>(ArrL);
  18.         populateArraySruct(ArrL, &PackUArrOut);
  19.         NimT* CurrentPack = PackUArrOut;
  20.         for (int i = 0; i < ArrL; i++, CurrentPack++)
  21.         {
  22.             RtPackLst.Add(new NimT() {Val1 = CurrentPack->Val1, Val2 = CurrentPack->Val2, Val3 = CurrentPack->Val3 });
  23.         }
  24.         return RtPackLst;
  25.     }
  26.  
  27.  
  28. **NIM**
  29. # feel free to change uint32 to int / int32 i have tried to be more specific in the type convention
  30.  
  31. type
  32.   ExportNimTARRAY = seq[ExportNimT]
  33.   ExportNimT = object
  34.     Val1: uint32
  35.     Val2: uint32
  36.     Val3: uint32
  37.  
  38. proc populateArraySruct(parSze: int, PackArrINOUT: var ExportNimTARRAY) {.exportc,dynlib.} =
  39.   PackArrINOUT.newSeq(parSze)
  40.   var
  41.     tmp1: uint32
  42.     tmp2: uint32    
  43.     tmp3: uint32
  44.   for i, curDataPack in PackArrINOUT.mpairs:
  45.     tmp1 = (uint32 1) * (uint32 i)
  46.     tmp2 = (uint32 10) * (uint32 i)
  47.     tmp3 = (uint32 11) * (uint32 i)
  48.     curDataPack = ExportNimT (Val1:tmp1, Val2: tmp2, Val3: tmp3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement