managed из unmanaged
От: alkash  
Дата: 03.04.03 09:51
Оценка:
Есть ли возможность вызвать функцию dll .Net из unmanaged кода?
Если возможно, то где посмотреть пример.
Re: managed из unmanaged
От: avsbox  
Дата: 03.04.03 10:29
Оценка:
Здравствуйте, alkash, Вы писали:

A>Есть ли возможность вызвать функцию dll .Net из unmanaged кода?

A>Если возможно, то где посмотреть пример.

В MSDN есть топик
Handling Language Interoperability with the Microsoft .NET Framework
а также
Interoperability Samples
... << RSDN@Home 1.0 beta 6a >>
Re: managed из unmanaged
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.04.03 17:28
Оценка:
Здравствуйте, alkash, Вы писали:

Варианты:

1. Зарегистрировать дотнетный объект как КОМ-объект.
2. Создать над дотнетным объектом обертку на МС++ в которой экспортировать функции (как в обычной длл-ке).
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: managed из unmanaged
От: alkash  
Дата: 04.04.03 05:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>2. Создать над дотнетным объектом обертку на МС++ в которой экспортировать функции (как в обычной длл-ке).


в С++ ни чего не понимаю, можно кусок кода?
Re[2]: managed из unmanaged
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.04.03 08:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>1. Зарегистрировать дотнетный объект как КОМ-объект.

VD>2. Создать над дотнетным объектом обертку на МС++ в которой экспортировать функции (как в обычной длл-ке).
3. Самому захостить CLR
... << RSDN@Home 1.0 beta 6a >>
AVK Blog
Re[3]: managed из unmanaged
От: mihailik Украина  
Дата: 04.04.03 15:55
Оценка:
AVK>3. Самому захостить CLR

Третье редко когда необходимо. Почти всегда удобнее сделать промежуточный .NET-helper, видимый как COM-объект.
... << RSDN@Home 1.0 beta 6a >>
Re[4]: managed из unmanaged
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.04.03 18:23
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Третье редко когда необходимо. Почти всегда удобнее сделать промежуточный .NET-helper, видимый как COM-объект.


Ну не скажи. Инетроп внутри одного процесса куда интереснее в плане перфоманса нежели межпроцессный.
... << RSDN@Home 1.0 beta 6 (np: тихо) >>
AVK Blog
Re[5]: managed из unmanaged
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.03 20:29
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну не скажи. Инетроп внутри одного процесса куда интереснее в плане перфоманса нежели межпроцессный.


Длл на МС++ решит все ваши проблемы перформанса.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: managed из unmanaged
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.03 20:29
Оценка: 1 (1)
Здравствуйте, 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 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.