ManagedCUDA "Struct" instead of "Class"


As I wanted to run my CUDA C/C++ program from a C# application, some people advised me to use ManagedCUDA, so it’s what I did and, with some example, after reading some topics and more failure and test I finally figured out how it works… more or less…

I read that ManagedCUDA doesn’t allow to pass class to kernels so we need to declare it as a structure, that’s what I did. But in theses class I got few function (between 1 and 20) and few class (~8). I’m wondering if it’s possible to just declare the function and define it in the .cu file or if I must declare it in C# and int CUDA. If we can, how to proceed ? I’m not that familiar neither with managedCUDA nor with C#, I’m still learning.

And I also wanted to know how can I allocate variable in a structure with managedCUDA ? 'cause I did something like this :

class program
  struct foo
   int geo;

  void main(string[] args)
   CudaDeviceVariable<int>foo.geo = new CudaDeviceVariable<int>(100);
   //got error on "foo.geo" -> "expected ;"
   //use it some way I donc know..
   // CudaDeviceVariable does not contain a definition of geo

So how can I do something like this. I did something very similar in CUDA C/C++ and it works

class foo
 int *tabgeo;

int main(void)
 foo geo;

 cudaMalloc((void **)&geo.tabgeo, sizeof(int) * 100);
 // and i can use it in kernel