Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд. > Статьи

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.09.2009, 10:16
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 1  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
По умолчанию Взаимодействие Zinc и .NET

Есть замечательный mdm-класс mdm.DLL(). Он позволяет подключать к вашему приложению любые длл и работать с их экспортными функциями. Тем самым предоставляется возможность неограниченно расширять функционал вашего приложения. Однако в доках указывается одно существенное ограничение: этот класс может подключить только длл написанные на С++ в среде MS VisualStudio C++ или на Delphi. А как же .NET? Этот фреймворк заслуженно пользуется популярностью среди разработчиков и содержит массу полезностей. Писать на .NET зачастую проще и быстрее. Короче, как бы это исправить, то бишь научить цинк работать с нетовскими сборками?
Против доков не попрешь, нет-длл к цинку не подключить напрямую, это правда.
Но кто мешает написать с++-длл, выполняющую роль обертки, транслирующей вызовы из нативного кода в ненативный, т.е. в код, написанный на .NET?
Покопавшись в запасниках сорцов Интернета, я нашел доволно много примеров написания такого рода оберток. Вот один из них, наиболее простой для понимания и реализации (есть и посложнее) : http://www.codeproject.com/KB/dotnet/bridge.aspx
Изучив эту статейку, и ничтоже сумняшеся, я решил прикрутить все это дело к цинку.
Что нужно для работы:
- MS VC++ 2008 Express Edition для написания обертки,
- MS VC# 2008 Express Edition для написания нетовской сборки,
- Flash IDE (8)
- Zinc (2.5.0.34).
Начнем.
В VC# создаем проект типа ClassLibrary, даем ему какое-нибудь название типа cslib. Открываем класс, созданный средой по-умолчанию, переименовываем его, скажем в MyDotNetClass, namespace тоже можно указать что-то навроде CSLib.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSLib
{
    public class MyDotNetClass
    {
        public void MsgBox(String df)
        {
            MessageBox.Show(df,".NET");
        }
    }
}
Компилим, получаем файл cslib.dll.

В VC++ создаем пустой win32-проект типа dll. В свойствах проекта на вкладке "Свойства конфигурации->Общие" в пункте "Поддержка среды CLR" указываем "CLR-поддержка, старый синтаксис". Добавляем в проект срр-файл следующего содержания:
Код:
// bridgeNet.cpp: определяет экспортированные функции для приложения DLL.
//
#using "mscorlib.dll"
 //далее в #using указываем путь к нетовской сборке, которую хотим врапить
#using "..\..\app\cslib.dll" 
// ну и namespace из сборки укажем
using namespace CSLib;

extern "C"  
{
	__declspec(dllexport) bool __cdecl net_MsgBox(char* df)
	{
		MyDotNetClass __gc *dotNetClass;
		dotNetClass = new MyDotNetClass;
		dotNetClass->MsgBox(df);
		return true;
	}
}
Компилим, получаем файл bridgeNet.dll (название может быть вашим).
Во Flash IDE создаем новый .fla,скажем, zincNet.fla, кладем на сцену кнопку btn и текстовое поле txt типа input. Пишем в первом кадре
Код:
btn.onRelease = function() {
	var myDLL = new mdm.DLL("bridgeNet.dll");
	var frequency = myDLL.addParameter("string", txt.text);
	var res:Boolean = myDLL.call("boolean", "net_MsgBox");
};
Компилим, получаем zincNet.swf.
В Zinc IDE компилим из этого свф-а zincNet.exe.
Последнее, собираем все файлики cslib.dll, bridgeNet.dll, zincNet.exe в одну папочку. Запускаем ехе и набив какую-нибуть строчку в инпуте жмем кнопку. Появляется мессаджбокс с вашей строчкой. Все. Вот мы и вызвали метод класса из .NET-сборки.
Пример минимизирован до-нельзя. Как обычно, копать, думать и опять копать дальше вам придется самостоятельно)).
Во вложении архив проектов c++, c# и .fla, а так же получившиеся у меня длл-ки.
Вложения
Тип файла: zip ZINK+NET.zip (70.9 Кб, 248 просмотров)


Последний раз редактировалось alexcon314; 17.09.2009 в 14:36.
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


 


Часовой пояс GMT +4, время: 17:49.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.