extern "C#" int Method()
{
// some code
return 0;
}
Library in C# inluding to C++
У меня есть вопрос к вам.
1) Как написать библиотеку на C# (static and dynamic) ?
2) Как эту библиотеку подключить в С/С++?
И можно ли так юзать:
Код:
а потом в настройках проэкта подключить *.lib, *.dll ?
Если да, то какой проєкт нужно создавать для библиотеки СиШарпа?
Заранее благодарен за помощь...
1) Как написать библиотеку на C# (static and dynamic) ?
[/quote]В свойствах проекта указать Class Library
[quote='[NightMare];296685']
2) Как эту библиотеку подключить в С/С++?
[/quote]В нативном C++ никак, развечто посредством COM+. В Managed C++ элементарно добаляется ссылка (reference).
В общем, идитие-ка, читайте что такое "управляемый код" и почему CLR (в общем случае) понятия не имеет о так называемых static и dynamic библиотеках.
З.Ы. хочется спросить, ну сколько можно задавать этот глупый вопрос? каждый месяц всплывает умник, пытающийся залинковать свою программулину на С++ с кодом на CIL.
этот C#-код скомпилим в dll'ку
Код:
namespace MyNamespace
{
public class MyClass
{
public static int MyMethod(string text)
{
MessageBox.Show(text);
return 0;
}
}
}
{
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();
}
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 :)
Цитата: Ander Skirnir
По поводу жутких хаков - можно взять да заюзать mcoree (Microsoft .NET Runtime Execution Engine).
Это не хак, это вполне стандартная процедура хостинга CLR. Этот механизм использует SQL Server 2005/2008. Но, в принципе, с дополнением согласен.
Цитата:
Впринципе, при достаточном уровне познаний в области чёрной магии можно написать кодогенератор врапперов дотнетовских dll
Да как нефиг делать, в .NET есть пространство имен CodeDom, с классами, нацеленными на это дело.;)