在 C++/CLI 中访问非托管数组
Accessing Unmanaged Array in C++/CLI
我的主程序是用 C++/CLI(托管)编写的。我的某些硬件的 API 包含在 .C 文件中。在我的主程序中,我为非托管 C 代码调用 main(),它创建一个数组并与硬件一起工作。完成后,它会断开与硬件的连接,释放内存,然后 returns 到 C++/CLI 程序。
从非托管 C 代码访问(复制)该数组到托管 C++ 的好方法是什么?
参见How to: Pin Pointers and Arrays;示例代码是
#include <vector>
#include <algorithm>
#include <msclr/all.h>
using namespace System;
int main(array<System::String ^> ^args)
{
constexpr size_t count = 100;
std::vector<int> unmanged_ints;
for (auto i = 0; i < count; i++)
unmanged_ints.push_back(i);
auto managed_ints = gcnew cli::array<int>(count);
cli::pin_ptr<int> pManaged_ = &managed_ints[0];
int* pManaged = pManaged_;
std::copy(unmanged_ints.cbegin(), unmanged_ints.cend(), pManaged);
return 0;
}
我的主程序是用 C++/CLI(托管)编写的。我的某些硬件的 API 包含在 .C 文件中。在我的主程序中,我为非托管 C 代码调用 main(),它创建一个数组并与硬件一起工作。完成后,它会断开与硬件的连接,释放内存,然后 returns 到 C++/CLI 程序。
从非托管 C 代码访问(复制)该数组到托管 C++ 的好方法是什么?
参见How to: Pin Pointers and Arrays;示例代码是
#include <vector>
#include <algorithm>
#include <msclr/all.h>
using namespace System;
int main(array<System::String ^> ^args)
{
constexpr size_t count = 100;
std::vector<int> unmanged_ints;
for (auto i = 0; i < count; i++)
unmanged_ints.push_back(i);
auto managed_ints = gcnew cli::array<int>(count);
cli::pin_ptr<int> pManaged_ = &managed_ints[0];
int* pManaged = pManaged_;
std::copy(unmanged_ints.cbegin(), unmanged_ints.cend(), pManaged);
return 0;
}