-
Как передать указатель на объект в другой метод. (Передавать саму переменную типа объект не получится в моем случае).
Как бы запаковать в IntPtr, а потом разименовать: Some some = (Some)ptr;
Marshal.ReadInt32(ptr, sync); - не получается, равно как и Marshal.WriteInt32(ptr, sync);
-
А как по-вашему передаются параметры в С#?
-
как и везде, надо думать.
как сделать это: Some some = new Some(); .....
Test(some);
void Test(IntPtr ptr) { Some some = (Some)ptr; some.Do(); }
-
> alex_*** © (07.02.06 11:47) [2] > > как и везде, надо думать. >
Не надо думать (в данном случае). Надо читать книжки! В "Паскале" параметры передаются "по значению" (и то не все), а в С - по ссылке. Использование указателей в C# вообще крайне не рекомендовано производителем (читай "запрещено"). Как, по-вашему, интерпретировать следующие выражения:
Some some = new Some();
Some some_1 = some;
?
-
Хочешь сказать что все передается по ссылке? даже ValueType? Я и спрашиваю как передать IntPtr
-
Я хочу сказать, что перед тем, как садиться программировать... Точнее, как садиться писать не-пойми-какой-код, надо потратить хоть пару недель на чтение литературы по теме :( а не задавать бессмысленные и нескончаемые вопросы на форумах! О литературе говорилось здесь : http://pda.delphimaster.net/?id=1138713366&n=3
-
нет у меня пары недель. Если нечего сказать, не надо и наезжать. Если бы я мог передать щбъект по ссылке, я бы давно так и сделал и не заморачивался. Совет про книжки я и сам знаю.
-
а делается это так, если кому интересно:
IntPtr ptr = Marshal.AllocHGlobal(4);
Marshal.GetNativeVariantForObject(sync, ptr);
test_sync = Marshal.GetObjectForNativeVariant(ptr) as Integration_Sync.StartSync;
Надо будет посмотреть будет ли верно подсчитываться кол-во ссылок
-
А зачем такой крокодил нужен?
-
Крокодил был нужен, как и большинство крокодилов, из-за незнания. Не умею я грамотно пока на Biztalk писать, а проект должен работать. p.s. Проблема в итоге разрешилась без этих извратов, слава богу.
|