Фон:. В рамках большего назначения мне нужно сделать библиотеку С# доступной для неуправляемого кода С++ и C. В попытке ответить на этот вопрос сам я изучаю С++/CLI последние несколько дней/недель.
Кажется, существует несколько различных способов достижения использования С# dll из неуправляемого С++ и C. Некоторые из кратких ответов: использование служб Interlope, Использование .com. и regasm, используя PInvoke (который, как представляется, идет только с С# на С++) и использует IJW в С++/CLR (который, как представляется, является Interlope-сервисами). Я думаю, было бы лучше настроить библиотеку, которая, возможно, является оболочкой CLR, которая использует IJW для вызова моей С# dll от имени собственного кода С++ и C.
Особенности: Мне нужно передать значения строки, а также int в С# dll из кода С++ и вернуть void.
Актуальность: У многих компаний есть много оправданий для смешивания и сопоставления С++, C и С#. Производительность: неуправляемый код, как правило, быстрее, интерфейсы: управляемые интерфейсы, как правило, проще в обслуживании, развертывании и часто проще на глазах, говорят нам менеджеры. Устаревший код заставляет нас тоже. Он был там (Как гора, которую мы поднялись). Хотя примеры того, как вызывать С++-библиотеку из С#, весьма многочисленны. Примеры того, как вызывать библиотеки С# из кода на С++, трудно найти с помощью Googling, особенно если вы хотите увидеть обновленный код 4.0+.
Программное обеспечение: С#, С++/CLR, С++, C, Visual Studio 2010 и .NET 4.0
Сведения о запросе: OK многочастный вопрос:
-
Есть ли преимущество в использовании COM-объектов? Или PInvoke? Или какой-то другой метод? (Я чувствую, что кривая обучения здесь будет такой же крутой, хотя я нахожу больше информации по этой теме в Google Land. IJW, кажется, обещает, что я хочу, чтобы она сделала. Должен ли я отказаться от поиска решения IJW и сосредоточиться на этом вместо?) (Преимущество/недостаток?)
-
Я правильно понимаю, что есть решение, где я пишу обертку, которая использует IJW в С++/CLR? Где я могу найти дополнительную информацию по этой теме и не скажу, что я недостаточно Google или смотрю на MSDN, не сообщая мне, где вы там его видели. (Я думаю, что я предпочитаю этот вариант, пытаясь написать четкий и простой код.)
-
Сужение области вопроса: я чувствую, что моя настоящая проблема и необходимость отвечают на меньший вопрос: Как настроить библиотеку С++/CLR, которую неуправляемый файл С++ может использовать в visual studio. Я думаю, что если бы я мог просто создать управляемый С++-класс в неуправляемом С++-коде, тогда я мог бы решить все остальное (сопряжение и упаковка и т.д.). Я ожидаю, что моя главная глупость в попытке настроить ссылки /# включает и т.д. В Visual Studio, я думал, что у меня могут быть другие неправильные представления. Возможно, ответ на все это может быть просто ссылкой на учебник или инструкции, которые помогут мне в этом.
Исследование: У меня есть Googled и Binged снова и снова с некоторым успехом. Я нашел много ссылок, в которых показано, как использовать неуправляемую библиотеку из кода С#. И я признаю, что были некоторые ссылки, которые показывают, как это сделать, используя COM-объекты. Не многие результаты были нацелены на VS 2010.
Литература: Я читал много и много сообщений. Я пытался работать через самые актуальные. Некоторые кажутся мучительно близкими к ответу, но я просто не могу заставить их работать. Я подозреваю, что то, что мне не хватает, мучительно мало, например, неправильно использовать ключевое слово ref или пропустить инструкцию #include или using или неправильное использование пространства имен или не использовать функцию IJW должным образом или не имеет значения, которое VS нужно правильно обрабатывать компиляцию и т.д. Поэтому вам интересно, почему бы не включить код? Ну, я чувствую, что я не в месте, где я понимаю и ожидаю, что код должен работать. Я хочу быть в месте, где я это понимаю, когда я приеду туда, может быть, мне понадобится помощь в его исправлении. Я случайно включу две ссылки, но мне не разрешено показывать их на моем текущем уровне Hitpoint.
http://www.codeproject.com/Articles/35437/Moving-Data-between-Managed-Code-and-Unmanaged-Cod
Этот код вызывает управляемый и неуправляемый код в обоих направлениях, идущих от С++ к Visual Basic и обратно через С++ CLR, и, конечно, меня интересует С#.: http://www.codeproject.com/Articles/9903/Calling-Managed-Code-from-Unmanaged-Code-and-vice