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

Ваш аккаунт

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

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

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

Library in C# inluding to C++

47K
13 сентября 2009 года
[NightMare]
14 / / 13.09.2009
[COLOR="LightBlue"]Доброе время суток...[/COLOR]

У меня есть вопрос к вам.
1) Как написать библиотеку на C# (static and dynamic) ?
2) Как эту библиотеку подключить в С/С++?

И можно ли так юзать:
 
Код:
extern "C#" int Method()
{
     // some code
     return 0;
}


а потом в настройках проэкта подключить *.lib, *.dll ?

Если да, то какой проєкт нужно создавать для библиотеки СиШарпа?

Заранее благодарен за помощь...
5
13 сентября 2009 года
hardcase
4.5K / / 09.08.2005
[quote='[NightMare];296685']
1) Как написать библиотеку на C# (static and dynamic) ?
[/quote]В свойствах проекта указать Class Library

[quote='[NightMare];296685']
2) Как эту библиотеку подключить в С/С++?
[/quote]В нативном C++ никак, развечто посредством COM+. В Managed C++ элементарно добаляется ссылка (reference).


В общем, идитие-ка, читайте что такое "управляемый код" и почему CLR (в общем случае) понятия не имеет о так называемых static и dynamic библиотеках.





З.Ы. хочется спросить, ну сколько можно задавать этот глупый вопрос? каждый месяц всплывает умник, пытающийся залинковать свою программулину на С++ с кодом на CIL.
29K
13 сентября 2009 года
Ander Skirnir
109 / / 08.06.2009
По поводу жутких хаков - можно взять да заюзать mcoree (Microsoft .NET Runtime Execution Engine).

этот C#-код скомпилим в dll'ку
Код:
namespace MyNamespace
{
  public class MyClass
  {
    public static int MyMethod(string text)
    {
      MessageBox.Show(text);
      return 0;
    }
  }
}


а так выполним код из нативных ++ или даже просто си :

Код:
#include "MSCorEE.h"

void StartTheDotNetRuntime()
{
  // Подключаем CLR
  ICLRRuntimeHost *pClrHost = NULL;
  HRESULT hr = CorBindToRuntimeEx(
    NULL, L"wks", 0, CLSID_CLRRuntimeHost,
    IID_ICLRRuntimeHost, (PVOID*)&pClrHost);

  hr = pClrHost->Start();

  // Теперь можно вызвать метод .Net библиотеки
  DWORD dwRet = 0;
  hr = pClrHost->ExecuteInDefaultAppDomain(
    L"c:\\PathToYourManagedAssembly\\
    MyManagedAssembly.dll",
    L"MyNamespace.MyClass", L"MyMethod",
    L"MyParameter", &dwRet);

  // Выгружаем CLR
  hr = pClrHost->Stop();

  // Убираем за собой
  pClrHost->Release();
}


(ц) хакер.ру (код отсюда: http://www.xakep.ru/magazine/xa/121/096/1.asp)

Впринципе, при достаточном уровне познаний в области чёрной магии можно написать кодогенератор врапперов дотнетовских dll :)
5
14 сентября 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Ander Skirnir
По поводу жутких хаков - можно взять да заюзать mcoree (Microsoft .NET Runtime Execution Engine).

Это не хак, это вполне стандартная процедура хостинга CLR. Этот механизм использует SQL Server 2005/2008. Но, в принципе, с дополнением согласен.

Цитата:

Впринципе, при достаточном уровне познаний в области чёрной магии можно написать кодогенератор врапперов дотнетовских dll

Да как нефиг делать, в .NET есть пространство имен CodeDom, с классами, нацеленными на это дело.;)

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