Конференция ".Net" » передать указатель на объект [C#]
 
  • alex_*** © (07.02.06 11:07) [0]
    Как передать указатель на объект в другой метод. (Передавать саму переменную типа объект не получится в моем случае).

    Как бы запаковать в IntPtr, а потом разименовать:
    Some some = (Some)ptr;

    Marshal.ReadInt32(ptr, sync); - не получается, равно как и Marshal.WriteInt32(ptr, sync);
  • Курдль © (07.02.06 11:32) [1]
    А как по-вашему передаются параметры в С#?
  • alex_*** © (07.02.06 11:47) [2]
    как и везде, надо думать.

    как сделать это:
    Some some = new Some();
    .....

    Test(some);

    void Test(IntPtr ptr)
    {
     Some some = (Some)ptr;
     some.Do();
    }
  • Курдль © (07.02.06 11:59) [3]

    > alex_*** ©   (07.02.06 11:47) [2]
    >
    > как и везде, надо думать.
    >


    Не надо думать (в данном случае). Надо читать книжки!
    В "Паскале" параметры передаются "по значению" (и то не все), а в С - по ссылке.

    Использование указателей в C# вообще крайне не рекомендовано производителем (читай "запрещено").

    Как, по-вашему, интерпретировать следующие выражения:

    Some some = new Some();
    Some some_1 = some;



    ?
  • alex_*** © (07.02.06 12:05) [4]
    Хочешь сказать что все передается по ссылке? даже ValueType? Я и спрашиваю как передать IntPtr
  • Курдль © (07.02.06 13:30) [5]
    Я хочу сказать, что перед тем, как садиться программировать... Точнее, как садиться писать не-пойми-какой-код, надо потратить хоть пару недель на чтение литературы по теме :(
    а не задавать бессмысленные и нескончаемые вопросы на форумах!

    О литературе говорилось здесь : http://pda.delphimaster.net/?id=1138713366&n=3
  • alex_*** © (07.02.06 13:34) [6]
    нет у меня пары недель. Если нечего сказать, не надо и наезжать. Если бы я мог передать щбъект по ссылке, я бы давно так и сделал и не заморачивался. Совет про книжки я и сам знаю.
  • alex_*** © (07.02.06 14:55) [7]
    а делается это так, если кому интересно:


    IntPtr ptr = Marshal.AllocHGlobal(4);
    Marshal.GetNativeVariantForObject(sync, ptr);
    test_sync = Marshal.GetObjectForNativeVariant(ptr) as Integration_Sync.StartSync;



    Надо будет посмотреть будет ли верно подсчитываться кол-во ссылок
  • DiamondShark © (07.02.06 21:24) [8]
    А зачем такой крокодил нужен?
  • alex_*** © (13.02.06 11:26) [9]
    Крокодил был нужен, как и большинство крокодилов, из-за незнания. Не умею я грамотно пока на Biztalk писать,  а проект должен работать.
    p.s. Проблема в итоге разрешилась без этих извратов, слава богу.
 
Конференция ".Net" » передать указатель на объект [C#]
Есть новые Нет новых   [134430   +2][b:0][p:0.001]