0

(%) で渡されたユーザー定義オブジェクトをネイティブ オブジェクト (&) に変換するにはどうすればよいですか。例えば

void managed_func(user_defined_managed_obj% m_obj_)
{
    // i need this
    obj_ptr->unmanaged_func(&m_obj_);
}

%m_obj_したがって、上記の例では、マネージド オブジェクトを の引数に渡したいと思いますunmanaged_func。ここで user_defined_managed_obj は、ネイティブ C++ のブリッジである C++/CLI の .net ラッパーです。

私は次のことを試しました:

pin_ptr<user_defined_unmanaged_obj> tmp_ptr = &m_obj_;
obj_ptr->unmanaged_func(*tmp_ptr);

誰かが私を正しい方向に向けるか、この問題を解決するために何ができるか教えてくれませんか. ありがとうございました。

編集:user_defined_unmanaged_objはネイティブ C++ オブジェクトであり、user_defined_managed_objはそのラッパー C++/CLI クラスです。

編集: 以下はコードです。ネイティブ C++ では、native_sql.h

#include <string>
class native_sql
{
public:
    native_sql(string arguments)
    {...some codes}
    ~native_sql(void) = default;
    void connect(void) {...some codes}
    void clean(void)   {...some codes}
}

ネイティブ C++ では、native_upload_specific_data.h

#include "native_sql.h"
#include <string>
class native_upload_specific_data
{
public:
    native_upload_specific_data(string arugments) {...some codes}
    ~native_upload_specific_data(void)
    void upload(native_sql& sql_obj_) {...some codes}
}

C++/CLI では、sql_wrapper.h

#include <msclr\marshal_cppstd.h>
#include "../native_sql.h"
#include "../native_sql.cpp"
using namespace System;
public ref class sql_wrapper
{
public:
    sql_wrapper(String^ arguments) 
    {...codes to convert String^ to std::string and pass args to
    new native_sql}
    ~sql_wrapper(void) { delete sql_ptr; }
    void connect_wrapper(void) { sql_ptr->connect(); }
    void clean_wrapper(void) { sql_ptr->clean(); }

    native_sql* sql_ptr;
}

C++/CLI ラッパーでは、upload_specific_data_wrapper.h

#include "../native_upload_specific_data.h"
#include "../native_upload_specific_data.cpp"
using namespace System;
public ref class upload_specific_data_wrapper
{
public:
    upload_specific_data_wrapper(String^ arguments)
    {...convert String^ args into std::strings and pass to 
    native_upload_specific_data ctor}
    ~upload_specific_data_wrapper(void) { delete data_ptr; }
    void upload(sql_wrapper% sql_obj_)
    {
        // here is where I have the problem
        pin_ptr<native_sql*> ptr = &(sql_obj_.sql_ptr);
        data_ptr->upload(ptr);
    }
    native_upload_specific_data* data_ptr;
}

私が受け取るエラーは

C2664: 'void native_upload_specific_data(native_sql&)': cannot convert arugment 1 from cli::pin_ptr<native_sql*> to native_sql&

....ありがとうございました。

4

0 に答える 0