| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Неуправляемое программирование на C# |
| Автор: nginx 18.10.2009, 00:18 | ||
| Добрый день, Меня беспокоит след. проблема: В C# существует возможность использования неуправляемого кода ( unmanaged code ), и данная возможность предоставленна для совмещения управляемого и неуправляемого кода. К примеру, насколько я понял, Silverlight написан на C++/C# ( да и многое другое, что есть в дотНЕТе ), как раз, в данном случае, группа разработчиков, которая занимается разработкой Silverlight использует данный прием. Хотелось бы узнать на практике, на самом банальном примере, как можно сделать совместную работу unmaned С++/C# ( если мы не Viusal C++ ( C++\CLI ), а к примеру GCC-комплиятор используем ). Если честно немного не понимаю, как это можно совместить. Просьба не ругать меня, я только учусь и хочу просто вникуть в теорию =) Ну давайте, приведем простейший код с неуправляемым кодом на C#:
Скомпилируем с опцией /unsafe. Указатель - это переменная, которая хранит адрес других переменных. Вернемься, к C++/C#, допустим в C++ я создал перменную (int)z , и задам ей значение 100. Пропущу через, GCC С++ программу, которая выводит значение этой переменной. Как я могу получить адрес данной переменной, и взять ее значение в С# и вывести через Console.WriteLine(); ? Или взять адрес переменной в программе, под управлением CLR , и использовать в С++ программе ( которую скомпилировал, не из Visual C++ ). PS: просьба не ругать =) только учусь и познаю программирование еще много не знаю, просьба , если написал глупость нормально разобъяснить Заранее спасибо, Олег |
| Автор: PashaPash 18.10.2009, 01:21 |
| nginx, слишком много пытаешься охватить. Вызов методов которые где-то написаны на C++ из C# - это не "неуправлемое программирование", это просто взаимодействие с неуправляемым кодом, для которого есть куча классов в System.Runtime.InteropServices. Решение твоей задачи: 1. Найди как создать dll на C++/GCC 2. Сделай в этой dll экспортируемый (dllexport) метод, который вернет значение, гм, переменной 3. Найди как в C# (из управляемого кода) вызывать методы из неуправляемой dll (посмотри DllImportAttibute) |
| Автор: nginx 18.10.2009, 01:32 |
| Спасибо за качественный ответ! =) Буду работать над этим, о результатах расскажу позже =) |