Здравствуйте, alkash, Вы писали:
A>Есть ли возможность вызвать функцию dll .Net из unmanaged кода?
A>Если возможно, то где посмотреть пример.
В MSDN есть топик
Handling Language Interoperability with the Microsoft .NET Framework
а также
Interoperability Samples
... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, alkash, Вы писали:
Варианты:
1. Зарегистрировать дотнетный объект как КОМ-объект.
2. Создать над дотнетным объектом обертку на МС++ в которой экспортировать функции (как в обычной длл-ке).
... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, VladD2, Вы писали:
VD>1. Зарегистрировать дотнетный объект как КОМ-объект.
VD>2. Создать над дотнетным объектом обертку на МС++ в которой экспортировать функции (как в обычной длл-ке).
3. Самому захостить CLR
... << RSDN@Home 1.0 beta 6a >>
AVK>3. Самому захостить CLR
Третье редко когда необходимо. Почти всегда удобнее сделать промежуточный .NET-helper, видимый как COM-объект.
... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, mihailik, Вы писали:
M>Третье редко когда необходимо. Почти всегда удобнее сделать промежуточный .NET-helper, видимый как COM-объект.
Ну не скажи. Инетроп внутри одного процесса куда интереснее в плане перфоманса нежели межпроцессный.
... << RSDN@Home 1.0 beta 6 (np: тихо) >>
Здравствуйте, AndrewVK, Вы писали:
AVK>Ну не скажи. Инетроп внутри одного процесса куда интереснее в плане перфоманса нежели межпроцессный.
Длл на МС++ решит все ваши проблемы перформанса.

... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, alkash, Вы писали:
A>в С++ ни чего не понимаю, можно кусок кода?
1. Создаем стандартное проект "Managed C++ Class Library" (визардом).
2. Открываем файл "ИмяПроекта.cpp". Он должен содержать следующее:
#include "stdafx.h"
#include "ИмяПроекта.h"
3. Добавляем в этот файл следующее:
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
using namespace System::Windows::Forms;
using namespace System::Drawing;
__declspec(dllexport) void func() // Это стандартный экспорт функции из DLL-и.
{
// Это код использующий сборку дотнета WinForms. Вместо нее может быть
// любая другая сборка. В том числе созданная на Шарпе (а то и на Дельфи.нэт).
Form * form = new Form();
System::Windows::Forms::Label * label = new Label();
label->Text = S"Привет из MC++";
label->Dock = DockStyle::Fill;
label->Font = new Font(S"Ariale", 14);
label->Parent = form;
form->StartPosition = FormStartPosition::CenterScreen;
form->ShowDialog();
}
Собственно все.
Далее юзаем ее из анмэнеджед языке:
Создаем пустой консольный проект и меняем его C++-файл следующим образом:
#include "stdafx.h"
#pragma comment(lib, "..\\MCppDll\\Debug\\MCppDll.lib")
__declspec(dllimport) void func();
int _tmain(int argc, _TCHAR* argv[])
{
func();
return 0;
}
Запускаем... и вуаля... Видим дотнетную форму над С++-сной консолью.
Естественно, что клиент может быть написан на чем угодно. Хоть на VB, хоть на Дельфи.
... << RSDN@Home 1.0 beta 6a >>