2016-11-17 12 views
0

管理対象スレッドでアンマネージクラスのメソッドを実行したいと思っていて、すぐにCLRに新しくなって混乱してしまいました。機能 アンマネージドクラスメソッド:非標準構文。 '&'を使用してメンバへのポインタを作成します

は、だから私は、アンマネージコードで約 マネージドスレッドをグーグルで開始したマネージクラスのメンバではないですが -

#include <boost/asio/io_service.hpp> 
using namespace System::Threading; 

public ref class ManagedClass; 

int main() 
{ 
    ManagedClass^ managedObject = gcnew ManagedClass(); 

    Thread^ threadOk = gcnew Thread(
         gcnew ThreadStart(
          managedObject, 
          &ManagedClass::Run)); 


    boost::asio::io_service unmanagedObject; 

    Thread^ threadWrong = gcnew Thread(
          gcnew ThreadStart(
           unmanagedObject, 
           &boost::asio::io_service::run)); 
} 

無効デリゲート初期化子は、明らかに、ので、何も明確でないことが判明した。何かアドバイス?完全に間違っているのですか?

+0

あなたは、あなたのアンマネージ関数を呼び出す管理機能を呼び出すことはできません何らかの理由で十分であった、言ったように? – UKMonkey

答えて

0

はUKMonkeyは少し決まり文句は...

public ref class CMyStartService 
{ 
    boost::asio::io_service * _pIoService; 

public: 
    CMyStartService(boost::asio::io_service * pIoService) : 
     _pIoService(pIoService) 
    { 
    } 

    void run() 
    { 
     _pIoService->run(); 
    } 
}; 

// in main 

CMyStartService^ cMyStartService = gcnew CMyStartService(&ioService); 
Thread^ thread_io_service = gcnew Thread( 
           gcnew ThreadStart(
           cMyStartService, &CMyStartService::run)); 
関連する問題