Напишите функцию CLI с shared_ptr в качестве входного и / или возвращаемого типа - PullRequest
0 голосов
/ 07 мая 2019

Я пишу приложение на C # для использования кода C ++. Я уже написал оболочку C ++ / CLI для этого. Теперь я могу вызывать функции и получать возвращаемые значения для Integer, String и других типов объектов. Но я застрял на две недели, чтобы реализовать функцию, которая будет возвращать и / или принимать параметр типа shared_ptr. Пожалуйста, помогите мне, я пишу обертку впервые. Спасибо.

C ++ функции:

SDKManager(std::shared_ptr<CoreListener> corelistener, std::shared_ptr<CscReceiver> csclistener);

void CreateSDK(std::shared_ptr<CoreListener> corelistener, std::shared_ptr<CscReceiver> csclistener, void* userdata);

std::shared_ptr<CoreListener> MakeCall(std::wstring number, CALL_TYPE type, bool isVideo);

C ++ / CLI:

public ref class SDKManagerWrapperClass {
  SDKManager *_pSDKManager;
public:
  SDKManagerWrapperClass(<params of handler type>) {
    //Conversion to be made from handler to shared_ptr type
    //to call the C++ function
    _pSDKManager = new SDKManager(<params of shared_ptr type>);
  }

  void CreateSDKWrapper(<params of handler type>) {
    //Conversion to be made from handler to shared_ptr type, and void*
    //to call the C++ function
    _pSDKManager->CreateSDK(<params of shared_ptr type>);
  }

  <handler type> MakeCallWrapper(<params of handler type>) {
     //Conversion from handler type
     return _pSDKManager->MakeCall(<params>);
  }
}

C # приложение:

CoreListener m_coreListener = new CoreListenerWrapper(); //works fine          
CscReceiver m_CscReceiver = new CscReceiverWrapper(); //works fine

//Doesn't work. Error: Not supported by the language
IPGSDKManagerWrapperClass m_SDKmanager = new IPGSDKManagerWrapperClass(m_coreListener, m_CscReceiver);

m_SDKmanager.CreateSDKWrapper(<params of handler type>);
handler = m_SDKmanager.MakeCallWrapper(<params of handler type>);

Теперь, как мне правильно написать конструктор и две функции в C ++ / CLI, чтобы я мог правильно их вызывать и получать от них возвращенные значения в приложении C #? Также как правильно их вызывать из приложения C #.

...