Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CLR Marshaling STL

385
21 июля 2008 года
SomewherSomehow
477 / / 25.07.2004
Доброе время суток. Может кто подскажет с решением следующего вопроса. Необходимо вызвать функцию из неуправляемого кода DLL. Прототип функции в управляемом коде прописал, но загвоздка в том, что одним из параметров, является список созданный при помощи контейнера STL:
 
Код:
typedef std::list< MyClass> MyClassList;

Каким образом прописать в управляемом коде такой тип (язык C#, VS 2003), чтобы его передать на вход прототипу функции. В справке нашеел только стандартные типы. Например:
void* - System.IntPtr
unsigned char - System.Byte
short - System.Int16
char* - System.String
и т.д.
5
21 июля 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: SomewherSomehow
Доброе время суток. Может кто подскажет с решением следующего вопроса. Необходимо вызвать функцию из неуправляемого кода DLL. Прототип функции в управляемом коде прописал, но загвоздка в том, что одним из параметров, является список созданный при помощи контейнера STL:
 
Код:
typedef std::list< MyClass> MyClassList;
Каким образом прописать в управляемом коде такой тип (язык C#, VS 2003), чтобы его передать на вход прототипу функции.

Никак. Эстеэль эстэелю - рознь. Нужно точно знать какой версии он, и вызывать через C++ естественно. На C# это изначально провально.

385
21 июля 2008 года
SomewherSomehow
477 / / 25.07.2004
Т.е. правильно ли я понял: в библиотеке классов .NET Framework 1.1 не существует средств при помощи которых можно создать такой тип данных в управляемом коде, который бы корректно передался методу неуправляемому кода, принимающего в качестве параметра список STL?
Почему-то мне кажется это сомнительным, слишком уж много кода написано с использованием STL, чтобы майкрософт отказалось от обеспечения поддержки и повторно используемого кода с STL (хотя с них станется). Как же их хваленая "все совместимость" или это чистый пиар...=)) Может есть еще какие-нибудь мысли на эту тему...
5
21 июля 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: SomewherSomehow
Т.е. правильно ли я понял: в библиотеке классов .NET Framework 1.1 не существует средств при помощи которых можно создать такой тип данных в управляемом коде, который бы корректно передался методу неуправляемому кода, принимающего в качестве параметра список STL?

Нет. STL вообще никак не корреллирут с .NET. Ни один тип из этой библиотеки или библиотеки boost нельзя использовать в .NET или хоть как-то представить его средствами - они несовместимы с системой типов CTS.
Возможен только опосредованный подход, когда создается некий фасад на C++ для работы с этими типами.

З.Ы. Делать экспортируюмую функцию, принимающую в качестве параметров stl-структуру данных - это очень-очень нехороший подход даже в мире C++.

З.Ы.Ы. Попробуйте сперва разобраться в принципах CTS прежде чем критиковать мелкомягких по поводу "обратной совместимости" с STL - совсем бессмысленными костылями в .NET.

385
21 июля 2008 года
SomewherSomehow
477 / / 25.07.2004
Сам по себе STL конечно "бессмысленные костыли" в .NET, но вот насчет совместимости... критиковать буду и это мягко сказано, и общая система типов тут не при чем, я про политику майкрософт в целом. То что плохой тон или нет, тоже не важно, т.к. факт такой, что поставлена библиотека, поставлено описание, как хотите, так линкуйтесь.. надо с ней работать...увы.

По теме: нашел в инете несколько статей в форумах на мсдн, действительно, придется создавать управляемый код на С++, прописывать там вызовы методов неуправляемого кода и уже потом тягать их из приложения си-шарп...мда..

Всем спасибо за внимание!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог