doree007 Ответов: 4

вызовите c# dll или класс в проекте c++


Я разрабатываю приложение на языке c++. Теперь я хочу вызвать класс на языке c# в программе c++. есть ли какой - нибудь способ сделать это? Можно ли сделать программу c# веб-службой и добавить ссылку на службу в проект c++?

Member 12139035

получаю сообщение об ошибке "ICalculatorPtr" в необъявленной udentifier, в чем проблема?

runfastman

У меня та же проблема, вы нашли решение?

4 Ответов

Рейтинг:
30

Marius Bancila

Это возможно, если вы используете COM. Вы должны сделать свой класс C# открытым для COM, а затем вы можете использовать его в C++. Вот пример, вдохновленный вопросом здесь:

namespace ManagedDLL
{
   // Interface declaration.
   [Guid("32529FAE-6137-4c62-9945-DE4198FA9D1B")]
   [InterfaceType(ComInterfaceType.InterfaceIsDual)]
   public interface ICalculator
   {
      [DispId(1)]
      int Add(int Number1, int Number2);
   };
}


namespace ManagedDLL
{
   // Interface implementation.
   [Guid("9F2F180D-94A9-47e6-91CC-6BCFABD1DDEB")]
   [ClassInterface(ClassInterfaceType.None)]
   [ProgId("ManagedDLL.ManagedClass")]
   public class ManagedClass : ICalculator
   {
      public int Add(int Number1, int Number2)
      {
         return Number1 + Number2;
      }
   }
}


Затем вы можете использовать это в C++:

#import "..\bin\ManagedDLL.tlb" raw_interfaces_only
using namespace ManagedDLL;

int _tmain(int argc, _TCHAR* argv[])
{
   // Initialize COM.
   HRESULT hr = CoInitialize(NULL);

   // Create the interface pointer.
   ICalculatorPtr pICalc(__uuidof(ManagedClass));

   long lResult = 0;

   // Call the Add method.
   pICalc->Add(5, 10, &lResult);

   wprintf(L"The result is %d\n", lResult);


   // Uninitialize COM.
   CoUninitialize();

   return 0;
}


doree007

Спасибо за ваш ответ. эти решения действительно полезны для меня.

doree007

как я могу использовать COM. Я новичок в этой области. Нужно ли мне создавать библиотеку классов или есть какой-то способ использовать существующее приложение windows.
можете ли вы помочь мне с пошаговыми инструкциями?. это действительно полезно для меня, чтобы понять, что происходит при вызове функции.

doree007

я получаю сообщение об ошибке "IcalculatorPtr": необъявленный идентификатор.. Как я могу это исправить???

malijooni

Привет Я применил ваши вышеприведенные инструкции и использовал их в интерфейсе c++/cli после создания exe-файла, который не запускается в другой системе... что же мне делать?

Рейтинг:
24

manoranjan

Нет необходимости превращать его в веб-сервис. Используя C++/CLI, вы можете создать экземпляр класса C#в своей программе C++ почти так же, как классы C++. Для создания экземпляра вам нужно использовать gcnew (вместо new).Чистые классы.

Подробнее см.:
http://en.wikipedia.org/wiki/C%2B%2B/CLI[^]


doree007

с помощью этих методов можно вызвать класс c# windows forms.

yogeshacharya

У меня есть только DLL C#, и я хочу использовать эту функцию в DLL C# в моем приложении C++. Как я могу это сделать ?

Marius Bancila

Да, конечно, это так.

manoranjan

Используйте gcnew для создания экземпляра класса C# в приложении C++, а затем используйте его.

Напр.:
MyCsClass ^cso = gcnew MyCsClass;
cso->f1();

doree007

как я могу сделать ссылки для приложения c# в приложении c++. потому что я вызываю класс c# windows forms. Я новичок в программировании на c++. так что, пожалуйста, помогите мне с этим.
еще раз спасибо за ваше время

yogeshacharya

Спасибо за решение

manoranjan

Создайте проект C++, поддерживающий среду CLR (например, проект приложения Windows Forms). Затем вы сможете добавлять ссылки через диалоговое окно "свойства" проекта.

manoranjan

добро пожаловать!

Рейтинг:
0

indrajit32

Использование среды CLR таких API-интерфейсов
видеть это:
http://msdn.microsoft.com/en-us/magazine/cc163567.aspx[^]
http://code.msdn.microsoft.com/windowsdesktop/CppHostCLR-e6581ee0[^]


Member 9982800

не удается получить доступ к методу из библиотеки COM
В чем же проблема

Рейтинг:
0

oniDino

Я создал библиотеку классов C# (DLL), которая выполняет вызовы веб-сервисов SOAP. При его создании убедитесь, что Вы зашли в свой проект properties > Build > Output > Затем обязательно установите флажок "Register for COM interop".

Если вы собираетесь вызвать эту библиотеку DLL C#, которая выполняет SOAP-вызовы из приложения C++, вам также необходимо убедиться, что SecurityProtocol установлен правильно. Для получения более подробной информации проверьте этот пост на SO, где я объясняю, какая проблема у меня была и как я ее решил

C# DLL вызов веб - службы SOAP из приложения C++ - переполнение стека[^]