Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему я не могу взять адрес метода, unsafe 
:(
    Опции темы
reborn
  Дата 17.11.2010, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.5.2010
Где: Russia, Moscow

Репутация: -4
Всего: -4



Привет народ!

Код

using System;

struct A
{
    public void Method1()
    {
        Console.WriteLine("\nTest!");
    }
}

unsafe class program
{
        static void Main()
        {
                int a = 10;
                int* b = &a;
                Console.WriteLine("\nint A : " + a + " -> 0x" + (uint)b + "\n");

                for(int i = 0; i <= 10; i++)
                {
                        int* z = &i;
                        Console.WriteLine(i + " -> 0x" + (uint)z);
                }

                A obj1 = new A();
                A* obj2 = &obj1;

                Console.WriteLine("\nThe address of struct is -> 0x" + (uint)obj2);

                //сначала юзал вар-т var/object* O = &obj2->Method1(); но тоже не получилось
                void* O = &obj2->Method1();
        }
}



Цель взять вирт. адрес метода структуры, в C++ это можно реализовать через typedef , в C# не соображу, пробывал через object или var, но безуспешно.

Прошу помочь,

Заранее спасибо
PM MAIL ICQ Skype   Вверх
kosmonaFFFt
Дата 18.11.2010, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



В С# нельзя взять адрес, там надо использовать делегаты...

Код

delegate void Bar();
class A
{
    void foo();
    Bar bar;

    A()
    {
        this.bar = new Bar(foo); // Инициализировали делегат.
    }
}

Вроде как-то так...


--------------------
user posted image
PM MAIL ICQ   Вверх
Любитель
Дата 18.11.2010, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92





--------------------
PM MAIL ICQ Skype   Вверх
A5uKa
  Дата 18.11.2010, 09:01 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



unsafe
{
    //  smile 
}
PM   Вверх
CYBERDREAM
Дата 18.11.2010, 10:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



это уже крайние меры


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
A5uKa
  Дата 18.11.2010, 13:14 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Цитата(CYBERDREAM @ 18.11.2010,  10:58)
это уже крайние меры

C# сам по себе крайняя мера если на то пошло.
PM   Вверх
Любитель
Дата 18.11.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Походу никто не читал первое сообщение smile
Там итак ансейф. Если реально нужен указатель на нативный метод (для интеропа, конечн, когда ж ещё?) - используется то, что я выше написал.


--------------------
PM MAIL ICQ Skype   Вверх
Ky7m
Дата 18.11.2010, 17:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 8.4.2008

Репутация: 1
Всего: 2



Цитата(Любитель @ 18.11.2010,  17:15)
Походу никто не читал первое сообщение smile
Там итак ансейф. Если реально нужен указатель на нативный метод (для интеропа, конечн, когда ж ещё?) - используется то, что я выше написал.

На половину не по теме, но вопрос по существу, основываясь на методе, описанном Вами выше, смогу ли я решить свою проблему, описаннную тут @LINK . То же проблема с получением виртуального адреса на структуру.
PM MAIL ICQ   Вверх
Любитель
Дата 18.11.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Это метод для "делания" из делегата поинтера на натив функцию (есть обратный). Вам что именно нужно (тему целиком не читал).


--------------------
PM MAIL ICQ Skype   Вверх
Ky7m
Дата 18.11.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 8.4.2008

Репутация: 1
Всего: 2



Основная проблема, в том что в DLL есть структура, описание которой я знаю. Необходимо получить её адрес и заполнить значениями все поля. 
Поэтому возникает вопрос, что если получить адрес на начало структуры и потом скопировать уже проинициализированную данными структуру, созданную в программе, в эту область памяти? 
Какие способы получения адреса на точку входа? Я экспериментировал, и следующий код

Код

[DllImport("PhGain_win32.dll", EntryPoint = "PhGain_Y", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern void PhGain_Y(); // PhGain_Y - структура


отрабатывает, значит я получаю адрес точки входа, а что дальше не совсем понятно. 
PM MAIL ICQ   Вверх
Любитель
Дата 19.11.2010, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Ну, главное структуру описать правильно (т. е. чтобы она содержала _только_ raw data). А так - в чистом виде это http://msdn.microsoft.com/en-us/library/ms146625.aspx.


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.