2013-06-01 2 views
0

Я недавно работала в COM-взаимодействии. Читайте несколько хороших книг об этом. C++/CLI в действии. Нишант Шивакумар. Я также воспользовался этой ссылкой Srinivas, в которой он прекрасно объяснил, как использовать библиотеку C# на родном C++, используя C++/CLI. Я загрузил код, присутствующий в нижней части страницы. Читайте его ... И понравилось. Мое приложение свободно основанный на нем. У меня есть вопрос, хотя в этом примере (который вы можете скачать там). В C# библиотеки «Worker.cs», если у меня есть метод в классе работника с подписью, как это ::Передача объекта в качестве параметра в c/CLI Wrapper Функция для экспорта в родную Win32 dll

public void GetStudent(ManagedStudent student,int){....} 

FYI :: Мне нужен параметр объекта, потому что я был бы доступ к методу от этого класса в рабочем классе.

В проекте оболочки C++/CLI, NativeInterface.h, я хотел экспортировать метод, который получает этот управляемый объект в качестве параметра, в отличие от примера.

__declspec dllexport void GetStudent(ManagedStudent^ obj) 

Что является эквивалентом объекта в C++/CLI?

И позже я хочу получить доступ к этому методу, импортировав этот метод, передав объект в свой собственный Win32 Application/DLL. Я включаю файл «NativeInterface.h» в своем родном dll/приложении. Но возникает ошибка при создании управляющего целевого кода dll/app .. требуется опция \ clr.

FYI :: 1. Мой длл WIN32/приложение компилируется без каких-либо \ поддержку CLR и моей оболочки с поддержкой \ CLR 2. Я считаю, что ошибка происходит из-за ручки, используемой в качестве параметра? Я хочу получить доступ к UnmanagedStudent (Object obj) в родном приложении/dll; Возможно ли это, что

+0

Вы можете определить свой ManagedStudent как COM-объект, чтобы каждый язык в мире, поддерживающий COM, мог получить к нему доступ совершенно естественно. –

ответ

0

Возможно, но вы не можете передать объект .NET в родную DLL, которая является родным кодом на C++ ... Эквивалент объекта .NET в C++ - это объект C++. .. но это как просить C# понять Native или PHP, или ... Итак, есть несколько подходов.

Не используйте управляемую оболочку C++. Вместо использования Marsahling и C# совместимости непосредственно обращаться в родной C++, в 1 из 2 способов:

  1. Пропустите поля объекта в виде длинного списка параметров в C++ и повторно построить объект внутри родной C++. Немного «неплохой» подход, но очень эффективный и легкий для отладки.
  2. Вы также можете передать объект как указатель класса непосредственно на C++, вам нужно сначала создать правильное маршалинг в C#. Смотрите здесь: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal(v=vs.110).aspx

Использование C++ Interop (который вы делаете ...). Вам нужно скомпилировать в смешанном режиме! Смотрите этот хороший пример: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/f2de75c5-50a6-41ac-9ddf-694a8c0ce75b/ НО ... Вы должны понять основы и знать, как скомпилировать: http://msdn.microsoft.com/en-us/library/x0w2664k.aspx

Interoperability сложный вопрос ... и я пытаюсь написать короткий ответ, пожалуйста, вернуться мне для дальнейших разъяснений ....

Смежные вопросы