【发布时间】:2011-09-09 03:22:00
【问题描述】:
如何将 C++/CLI int %tmp 转换为原生 C++ int &tmp?
void test(int %tmp)
{
// here I need int &tmp2 for another pure C++ function call
}
【问题讨论】:
标签: visual-c++ reference c++-cli interop mixed-mode
如何将 C++/CLI int %tmp 转换为原生 C++ int &tmp?
void test(int %tmp)
{
// here I need int &tmp2 for another pure C++ function call
}
【问题讨论】:
标签: visual-c++ reference c++-cli interop mixed-mode
现有答案都不能正确处理输入/输出参数,更不用说任何高级用例了。
这应该适用于 other_func 在返回后不保留引用的所有情况:
void test(int %tmp)
{
pin_ptr<int> pinned_tmp = &tmp;
other_func(*pinned_tmp);
}
【讨论】:
刚刚试了一下,效果很好:
//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;
}
【讨论】:
void your_function(int *);
void your_function2(int &);
void test(int %tmp)
{
int tmp2;
your_function(&tmp2);
your_function2(tmp2);
tmp=tmp2;
}
【讨论】: