Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

С++.NET сборка. Как задать ref парметр функции?

842
05 декабря 2008 года
sigmov
301 / / 16.09.2008
Вообщем задача следующая.
Пишу сборку С++.NET.
В С++.NET есть функция, требуется, чтоб ее параметры передавались как ссылки.
 
Код:
static public ref class Convert
     {
     public:
          generic<typename gtype>
          static inline void* pVoidCpy(gtype data){return &data;}
     ................
           }
Вообщем, задача получить указатель на объект плавающего типа(gtype). Но при такой передаче создается копия объекта, затем я получаю на нее указатель и копия удаляется. Т.е. указатель уже указывает на место, где ничего нет.

В идеале каким-то образом передать параметр как ссылку( в C# это делается словом ref ).
341
06 декабря 2008 года
Der Meister
874 / / 21.12.2007
ref C# -> % C++.
Для успешного применения указателей С++ к управляемым типам, необходимо также знать о pin_ptr и interior_ptr и о том, как их применять. Но...
Опять фигнёй маетесь. Научитесь пользоваться сериализацией объектов.
842
07 декабря 2008 года
sigmov
301 / / 16.09.2008
Серилизация копирует объект.
А мне не это требовалось, кстати я смог: :)
Кому интересно:
Код:
static public ref class Convert
    {
    public:
        generic<typename gtype>
        static void* Pointer(interior_ptr<gtype> data)
        {
            return Native::TopPointer(&data);
        }
        generic<typename gtype>
        static IntPtr NetPtr(interior_ptr<gtype> data)
        {
            return (IntPtr)Native::TopPointer(&data);
        }
..............
}
Код:
static class Native
    {
    public:
        //Поднять адресат
        static void* TopPointer(void* PV)
        {
            void **PPV;
            __asm
            {
                mov eax, PV        
                mov PPV, eax
            }
            return *PPV;
        }
..................
}

Теперь получение IntPtr объекта в 10! раз быстрее происходит, чем через Marshal.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог