2016-12-08 4 views
-2

내 메인 프로그램은 C++/CLI (관리 됨)로 작성되었습니다. 내 하드웨어의 일부 API는 .C 파일에 포함되어 있습니다. 내 주요 프로그램에서 main() 배열을 생성하고 하드웨어와 함께 작동하는 관리되지 않는 C 코드를 호출합니다. 완료되면 하드웨어와의 연결을 끊고 메모리를 비운 다음 C++/CLI 프로그램으로 돌아갑니다.C++/CLI에서 관리되지 않는 배열에 액세스

관리되지 않는 C 코드에서 관리되는 C++로 해당 배열에 액세스 (복사)하는 것이 좋은 방법은 무엇입니까?

+1

입니다. 관리되지 않는 C 코드가 "메모리를 확보하고 반환"하면 복사 할 항목이 없으므로 수행 할 수있는 작업이 많지 않습니다. –

+0

또한 "메인 프로그램"을 다른 .NET 언어 (예 : C#)로 작성해야합니다. Microsoft는 C++/CLI가 interop 시나리오에만 사용되도록 계획하고 있습니다. –

+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

관련 문제