我有现有的带有签名的 C# 代码Foo(long[][] longs)
,我需要从非托管 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 参考自动生成的。