Разделы презентаций


Лекция8.ppt

Создание библиотеки динамической компоновки, реализующей заглушкиIDL - язык определения интерфейса (Interface Definition Language)import "unknwn.idl";//Interface IInput[ object, uuid(3DC9017D-10E4-4D83-8097-E0FC0497B965), helpstring("IInput Interface"), pointer_default(unique)]interface IInput : IUnknown{ HRESULT input(); HRESULT output();};//Interface IPhone[ object, uuid(048C493E-A924-4345-8650-18BE597B4129), helpstring("IPhone

Слайды и текст этой презентации

Слайд 1COM-СЕРВЕР “OUT-OF-PROCESS”
Лекция 8

COM-СЕРВЕР “OUT-OF-PROCESS”Лекция 8

Слайд 2Создание библиотеки динамической компоновки, реализующей заглушки
IDL - язык определения интерфейса

(Interface Definition Language)
import "unknwn.idl";
//Interface IInput
[
object,
uuid(3DC9017D-10E4-4D83-8097-E0FC0497B965),
helpstring("IInput Interface"),
pointer_default(unique)
]
interface

IInput : IUnknown
{
HRESULT input();
HRESULT output();
};

//Interface IPhone
[
object,
uuid(048C493E-A924-4345-8650-18BE597B4129),
helpstring("IPhone Interface"),
pointer_default(unique)
]
interface IPhone : IUnknown
{
HRESULT giveACall([in] int nPhone);
HRESULT takeACall([in] int nPhone);
};
Создание библиотеки динамической компоновки, реализующей заглушкиIDL - язык определения интерфейса (Interface Definition Language)import

Слайд 3[
uuid(10C1D956-B61A-4B2C-8795-58CA53298ADB),
version(1.0),
helpstring("CInput 1.0 Type Library")
]
library InputLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
//Component
[

uuid(36C1D956-B61A-4B2C-8795-58CA53298ADB),
helpstring("Component class")
]
coclass CInput
{
[default] interface IInput;
};
};

[ uuid(10C1D956-B61A-4B2C-8795-58CA53298ADB), version(1.0), helpstring(

Слайд 4Компиляция .idl файла

Компиляция .idl файла

Слайд 5Компоновка и регистрация proxy.dll
LIBRARY Proxy.dll
DESCRIPTION ‘Proxy/Stub DLL’
EXPORTS
DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
GetProxyDllInfo @3 PRIVATE
DllRegisterServer @4 PRIVATE
DllUnregisterServer

@5 PRIVATE
proxy.def

Компоновка и регистрация proxy.dllLIBRARY			Proxy.dllDESCRIPTION		‘Proxy/Stub DLL’EXPORTS	DllGetClassObject	@1 PRIVATE	DllCanUnloadNow	@2 PRIVATE	GetProxyDllInfo	@3 PRIVATE	DllRegisterServer	@4 PRIVATE	DllUnregisterServer      @5 PRIVATEproxy.def

Слайд 6STDMETHODIMP CInput::input(){
MessageBox(NULL, "Enter data","input Info", MB_OK);
return S_OK;
}
STDMETHODIMP CInput::output(){
MessageBox(NULL,

"Output data","output Info", MB_OK);
return S_OK;
}
STDMETHODIMP CInput::giveACall(int phoneNumber){
char str[32];
sprintf(str,"You are

ringing up to %i",phoneNumber);
MessageBox(NULL, str,"output Info", MB_OK);
return S_OK;
}
STDMETHODIMP CInput::takeACall(int phoneNumber){
char str[32];
sprintf(str,"Dzine, dzine ... : %i",phoneNumber);
MessageBox(NULL, str,"output Info", MB_OK);
return S_OK;
}

Изменения в коде сервера, код компонента (CInput.cpp):

STDMETHODIMP CInput::input(){ MessageBox(NULL,

Слайд 7Изменения в коде сервера (код приложения input_exe.cpp):
#include
#include
#include
#include

"guid.h"
#include "CInput.h"

IClassFactory* g_pClassFactory;
DWORD g_dwRegister = 0;
HWND g_hWnd;

LRESULT CALLBACK WndProc (HWND,

UINT, WPARAM, LPARAM) ;
BOOL Init();
void UnInit();

int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;

Init();
Изменения в коде сервера (код приложения input_exe.cpp):#include #include #include #include

Слайд 8if (!hPrevInstance) {
wndclass.style =

CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "Class CInput" ;
RegisterClass (&wndclass) ;
}
hwnd = CreateWindow ("Class CInput", "Exe COM CInput",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL) ;
g_hWnd = hwnd;

ShowWindow (hwnd, nCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0)){
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
if (!hPrevInstance) {  wndclass.style     = CS_HREDRAW | CS_VREDRAW ;  wndclass.lpfnWndProc

Слайд 9LRESULT CALLBACK WndProc (HWND hwnd, UINT message,

WPARAM wParam, LPARAM lParam){

static char str[80] = "It is an Exe Server";
HDC hDC;
PAINTSTRUCT ps;
switch (message){
case WM_PAINT:
hDC = BeginPaint (hwnd, &ps);
TextOut (hDC, 0, 0, str, lstrlen (str));
EndPaint (hwnd, &ps);
return 0;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0;
default:
break;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, 		         WPARAM

Слайд 10BOOL Init(){
HRESULT hr;
hr = CoInitialize(NULL);
if (FAILED(hr)){

MessageBox(NULL, "CoInitialize failed", "CInput", MB_OK);
return FALSE;

}

g_pClassFactory = new CInputClassFactory;

if (g_pClassFactory == NULL)
return FALSE;

g_pClassFactory->AddRef();

hr = CoRegisterClassObject(CLSID_Input, g_pClassFactory, CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &g_dwRegister);

if (FAILED(hr))
return FALSE;

return TRUE;
}

Слайд 11void UnInit()
{
if (g_dwRegister != 0)

CoRevokeClassObject(g_dwRegister);

if (g_pClassFactory != NULL)
g_pClassFactory->Release();

CoUninitialize();
}

Компоновка и регистрация COM-сервера

REGEDIT
HKEY_CLASSES_ROOT\CInput.MyInput\CLSID = {36C1D956-B61A-4B2C-8795-58CA53298ADB}
HKEY_CLASSES_ROOT\CLSID\{36C1D956-B61A-4B2C-8795-58CA53298ADB} = CInput MyInput DLL
HKEY_CLASSES_ROOT\CLSID\{36C1D956-B61A-4B2C-8795-58CA53298ADB}\LocalServer32 = C:\workshop\run\comexe\server\input_exe.exe
HKEY_CLASSES_ROOT\CLSID\{36C1D956-B61A-4B2C-8795-58CA53298ADB}\ProgId = CInput.MyInput
HKEY_CLASSES_ROOT\Interface\{3DC9017D-10E4-4D83-8097-E0FC0497B965} = IInput
HKEY_CLASSES_ROOT\Interface\{3DC9017D-10E4-4D83-8097-E0FC0497B965}\NumMethods = 2
HKEY_CLASSES_ROOT\Interface\{048C493E-A924-4345-8650-18BE597B4129} = IPhone
HKEY_CLASSES_ROOT\Interface\{048C493E-A924-4345-8650-18BE597B4129}\NumMethods = 2

input_exe.reg

void UnInit(){  if (g_dwRegister != 0)    CoRevokeClassObject(g_dwRegister);  if (g_pClassFactory != NULL)

Слайд 12Изменения в коде клиента (test2.cpp):
#include
#include
#include
#include "guids.c"
#include "root.h"

int

main(){
…………………………………………………………….
DWORD dwContext = CLSCTX_LOCAL_SERVER; // необязательно
…………………………………
Компиляция и компоновка клиента (test2.cpp):

Изменения в коде клиента (test2.cpp):#include #include #include #include

Слайд 13Тестирование COM-сервера

Тестирование COM-сервера

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика