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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неуправляемое программирование на C# 
:(
    Опции темы
nginx
  Дата 18.10.2009, 00:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день,

Меня беспокоит след. проблема:

В C# существует возможность использования неуправляемого кода ( unmanaged code ), и данная возможность предоставленна для совмещения управляемого и неуправляемого кода.

К примеру, насколько я понял, Silverlight написан на C++/C# ( да и многое другое, что есть в дотНЕТе ), как раз, в данном случае, группа разработчиков, которая занимается разработкой Silverlight использует данный прием.

Хотелось бы узнать на практике, на самом банальном примере, как можно сделать совместную работу unmaned С++/C# ( если мы не Viusal C++ ( C++\CLI ), а к примеру GCC-комплиятор используем ).

Если честно немного не понимаю, как это можно совместить. Просьба не ругать меня, я только учусь и хочу просто вникуть в теорию =)

Ну давайте, приведем простейший код с неуправляемым кодом на C#:

Код

using System;

class program
{
    //Отмечаем метод Main() , как опасный
    unsafe public static int Main()
    {
        int a = 15;

        int* b; //Создаем указатель на int-значение
        
        b = &a; //Поместили адрес переменной a в указатель b

        Console.WriteLine("Начальное значение переменной a: " + *b); //Выведет 15

        *b = 9;

        Console.WriteLine("Новое значение переменной a равно: " + *b); //Выведет 9

        return 0;    

    }
}


Скомпилируем с опцией /unsafe.

Указатель - это переменная, которая хранит адрес других переменных.

Вернемься, к C++/C#, допустим в C++ я создал перменную (int)z , и задам ей значение 100.
Пропущу через, GCC С++ программу, которая выводит значение этой переменной.

Как я могу получить адрес данной переменной, и взять ее значение в  С# и вывести через Console.WriteLine(); ?
Или взять адрес переменной в программе, под управлением CLR , и использовать в С++ программе ( которую скомпилировал, не из Visual C++ ).

PS: просьба не ругать =) только учусь и познаю программирование еще много не знаю, просьба , если написал глупость нормально разобъяснить

Заранее спасибо,
Олег

Это сообщение отредактировал(а) Partizan - 18.10.2009, 16:31
PM MAIL   Вверх
PashaPash
Дата 18.10.2009, 01:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 13
Всего: 49



nginx, слишком много пытаешься охватить.
Вызов методов которые где-то написаны на C++ из C# - это не "неуправлемое программирование", это просто взаимодействие с неуправляемым кодом, для которого есть куча классов в System.Runtime.InteropServices. 
Решение твоей задачи:
1. Найди как создать dll на C++/GCC
2. Сделай в этой dll экспортируемый (dllexport) метод, который вернет значение, гм, переменной
3. Найди как в C# (из управляемого кода) вызывать методы из неуправляемой dll (посмотри DllImportAttibute)


--------------------
PM MAIL WWW   Вверх
nginx
Дата 18.10.2009, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за качественный ответ! =)
Буду работать над этим, о результатах расскажу позже =)


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

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


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

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


 




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


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

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