Ваш код совершенно неверный, синтаксическая ошибка.
Но вы можете сделать это:
$str = '<h1>Hello World</h1>';
switch ($action) {
case 'view':
echo $str;
break;
case 'save':
file_put_contents($file, $str, FILE_APPEND);
break;
default:
throw new Exception('Invalid action');
}
Мне было легко обычно вполне перенести некоторые существующие библиотеки C++ в C++ / CLI и встреченный сравнительно немного ловушек. Те, которых я могу помнить, были:
Просто некоторые проблемы, с которыми мы встретились:
Я просто добавлю к тому, что все уже сказали,
pin_ptr wch = PtrToStringChars (строка); (где строкой является Система:: Строка)
станет Вашим другом.
Вы не можете непосредственно включать неуправляемый класс в управляемый класс, но можно поместить указатель на неуправляемый класс и новый он в конструкторе и удалить его в деструкторе.
У меня не было проблем Timo Geusch, упомянутый со смешиванием C++ и C++ / код CLI в одном DLL. Мой DLL использует обоих экстенсивно без проблем.
C++ / CLI не является трудным (если Вы знаете C++ и.NET), и работает отлично.
Это довольно просто и работает хорошо. Это намного легче, чем PInvoke.
Большая вещь, которую необходимо не упустить, не имеет никаких неуправляемых участников в управляемых заголовках, включая членов парламента, не занимающих официального поста, сигнатуры методов, и т.д. Это должно хорошо иметь членов парламента, не занимающих официального поста, которые являются указателями на управляемые типы, хотя, просто используйте предописания для своих классов.
Кроме того, не упустите объектное время жизни. Легко представить утечки памяти, так как многие программисты.NET не привыкли к чистке после себя. Удостоверьтесь любые классы обертки, которые Вы создаете, доступны, если они содержат указатели и удостоверяются, что Вы избавляетесь от них в своем управляемом коде. Синтаксис для IDisposable в управляемом С++ является также странным, но это находится в документах.
Кроме того, помните несение небольшого хита каждый раз, когда Вы пересекаете управляемую/неуправляемую границу, так попытайтесь запланировать свой интерфейс соответственно. Если что-нибудь неоднократно называют в циклах, вероятно, лучше переместить тот цикл через границу, таким образом, Вы только пересекаетесь однажды. Не волнуйтесь слишком много об этом хотя, если Вы не говорите миллионы вызовов.
Эта статья идет другим путем, но это имеет некоторые полезные точки.
Пользуйтесь нашей библиотекой ManWrap для получения лучшей из.NET в собственном компоненте код C++
См. также
Управляемый код в Visual Studio 2005 и
Удаление управляемых объектов, перенося библиотеку, и больше
Для получения дополнительных ответов прочитайте эту превосходную серию сообщений разработчика пользовательского интерфейса Office о том, почему они решили создать новый пользовательский интерфейс для Office 2007. Основные причины сводились к:
Корпорация Майкрософт опубликовала документ по этому вопросу. Я его не читал.
-121--4690675-Как говорили другие: 98% времени он просто работает, его можно и быстро.
То, с чем я не сталкивался до сих пор:
Это даже сработало настолько хорошо, что я начал писать код C + +/CLI для выполнения единичных тестов кода C++. NUnit/Resharper с радостью найдет и запустит модульный тест в библиотеке DLL C + +/CLI, которая может напрямую вызвать ваш собственный код на ЛЮБОМ УРОВНЕ, даже протестировать ваши классы контейнеров шаблонов.