Я пишу приложение на 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 #.