Конвертировать .Net ref (%) в нативный (&) - PullRequest
4 голосов
/ 06 июня 2011

Как я могу преобразовать C ++ / CLI int %tmp в собственный C ++ int &tmp?

void test(int %tmp)
{
    // here I need int &tmp2 for another pure C++ function call
}

Ответы [ 3 ]

3 голосов
/ 07 июня 2011

Ни один из существующих ответов должным образом не обрабатывает параметры входа / выхода, не говоря уже о каких-либо дополнительных случаях использования.

Это должно работать во всех случаях, когда other_func не сохраняет ссылку после ее возврата:

void test(int %tmp)
{
    pin_ptr<int> pinned_tmp = &tmp;
    other_func(*pinned_tmp);
}
1 голос
/ 06 июня 2011

Только что попробовал, отлично работает:

  //in the C++ dll
void testFunc( int& n )
{
  n = 5;
}

  //in the CLI app
[DllImport( "my.dll", EntryPoint = "?exported_name_here",
   CallingConvention = CallingConvention::StdCall )]
void TestFunc( int& );

void test( int% tmp ) 
{
  int n;
  TestFunc( n );
  tmp = n;
}
0 голосов
/ 06 июня 2011
void your_function(int *);
void your_function2(int &);

void test(int %tmp)
{
    int tmp2;
    your_function(&tmp2);
    your_function2(tmp2);
    tmp=tmp2;
}
...