【发布时间】:2009-10-16 20:08:42
【问题描述】:
我有签名为 Foo(long[][] longs) 的现有 C# 代码,我需要从 非托管 C++(不是C++/CLI)调用它。我似乎无法找出 __gc[] 和 __gc* 的正确组合来让编译器满意。
使用 C++/CLI,这很简单:
std::vector<__int64> evens;
evens.push_back(2); evens.push_back(4); evens.push_back(6); evens.push_back(8);
std::vector<__int64> odds;
odds.push_back(1); odds.push_back(3); odds.push_back(5); odds.push_back(7);
std::vector<std::vector<__int64> > ints;
ints.push_back(evens); ints.push_back(odds);
array<array<__int64>^>^ mgdInts = gcnew array<array<__int64>^>(ints.size());
for (size_t i = 0; i<ints.size(); ++i)
{
const std::vector<__int64>& slice = ints[i];
mgdInts[i] = gcnew array<__int64>(slice.size());
for (size_t j=0; j<slice.size(); ++j)
mgdInts[i][j] = slice[j];
}
编辑:当我使用 Visual Studio 2008 时,“简单”的解决方案是将 C++/CLI 代码放在它自己的文件中并使用 /clr 进行编译;当然,如果我不必这样做会更容易(例如,其他带有托管 C++ 的 .h 文件)。 C# 代码无法更改,因为它是从 Web 参考自动生成的。
【问题讨论】:
标签: managed-c++