2016-12-08 24 views
-2

Моя основная программа написана на C++/CLI (управляется). API для некоторых из моего оборудования содержится в файле .C. Из моей основной программы я вызываю main() для неуправляемого кода c, который создает массив и работает с оборудованием. После завершения он отключается от аппаратного обеспечения, освобождает память и возвращается в программу C++/CLI.Доступ к неуправляемому массиву в C++/CLI

Что было бы хорошим способом получить доступ (копировать) этот массив из неуправляемого кода c в управляемый C++?

+1

Если неуправляемый код C «освобождает память и возвращает», вы не можете сделать много, так как копировать нечего. –

+0

Кроме того, вы должны написать свою «основную программу» на другом языке .NET (например, C#); Microsoft намеревается использовать C++/CLI только для сценариев взаимодействия. –

+0

Извините, может быть, я имел в виду Visual C++. – Matt

ответ

-2

См. 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; 
} 
+0

Смогу ли я передать закрепленный массив функции, написанной на C? Ссылка читается так, как будто она связывает ее как объект. – Matt

+0

да, как показано в приведенном выше коде на 'std :: copy()' –

+0

Не я, я все еще работаю. – Matt