Оболочка C++/cli dll для нативного C++ для использования в LabView

Я пытаюсь написать оболочку C++/cli для IO Industries Core2 DVR, которая затем будет использоваться LabView. Компания предоставила SDK со всеми заголовками (написанными на C++) и библиотекой boost. Мне удалось создать оболочку, которая собирает, и LabView может видеть функцию через паллету.net.

// ManagedProject.h

#pragma once
#include "core_api_helper.h"
#include "core_api.h"


using namespace System;
using namespace CoreApi;

namespace ManagedProject {

//Setup class
public ref class Setup
{
private:

public:
    unsigned int initializeTest();

};
}

// Это DLL-оболочка.

#include "stdafx.h"

#include "ManagedProject.h"
#include "core_api_helper.h"
#include "core_api.h"
#include "resource.h"

using namespace CoreApi;
using namespace Common;
using namespace ManagedProject;

//Global handles

//A handle to the Core Api
InstanceHandle g_hApi;

//A handle to the Core Api Device Collection
DeviceCollectionHandle g_hCoreDeviceCollection;


unsigned int Setup::initializeTest()
{

try
{
    //Initialize the Core API (must be called before any other Core API functions)
    //Returns a handle to the Core Api
    g_hApi = Instance::initialize();

    // get a collection of Core devices
    g_hCoreDeviceCollection = g_hApi->deviceCollection();

    unsigned int deviceCount = g_hCoreDeviceCollection->deviceCount();

    return deviceCount;
}
catch (GeneralException& e)
{
    e.what();
    return 3;

}

}

Однако, когда я запускаю LabView через Visual studio 2015 в режиме отладки, я сталкиваюсь с проблемой, описанной ниже, и в LabView возвращается 3 из блока catch.

Первый перерыв в режиме отладки (NULL ptr)ПРИМЕЧАНИЕ. InstanceHandle является shared_ptr

Как видно, переменная является указателем NULL, то же самое происходит и с g_hCoreDeviceCollectoin. Я думаю, что мне нужно создать экземпляр с помощью новой команды, но я немного не уверен, так как InstanceHandle является shared_ptr.

Любая помощь приветствуется

1 ответ

В C++/CLI есть отличная функция, называемая смешанным режимом. Вы можете использовать как управляемые, так и собственные типы данных в одном и том же коде (в одном классе C++/CLI). Попробуйте использовать объект из этого SDK, написанного на C++, прямо в вашей оболочке.

Другие вопросы по тегам