Integrazione di codice Unmanaged con codice Managed in applicazioni Windows Mobile - Seconda Parte

by sandro 5. January 2009 22:49

Start Listening

Riprendiamo la figura che abbiamo lasciato nella prima parte di questo tutorial:

 

1) Al click di un bottone presente sulla form, si genererà un altro thread che si occuperà di rimanere in ascolto delle chiamate provenienti dalla parte unmanaged. Queste chiamate indicheranno che un certo evento è successo nella parte unmanaged e dovremo quindi informare l'utente dell'interfaccia

2) Il "Listener thread" comunicherà al suo omologo unmanaged un delegate. In questo delegate c'è il nome di un metodo che sarà successivamente chiamato in corrispondenza dell'evento atteso. Per effettuare questa comunicazione si utilizza la tecnica del Platform Invoke. Un delegate sarà interpretato nella parte unmanaged come un puntatore a funzione.

3) Adesso siamo nella DLL non gestita. il Listener unmanaged crea un altro thread e proprio in questo thread va inserita tutta la logica relativa all'ascolto degli eventi a basso livello. Qui per esempio potremmo utilizzare un driver della porta seriale, oppure possiamo aprire una socket per rimanere in ascolto su una certa porta secondo un protocollo proprietario.

4) Appena accade una certa condizione, il thread comunica all'unmanaged thread che è accaduto quello che ci aspettavamo. E' il caso di avvertire la parte managed.

5) Si invoca il metodo che ci era stato passato nello step 2. Qui passiamo due parametri alla parte managed: un intero e una stringa. Dobbiamo fare qui sempre molta attenzione affinchè le cose tornino in maniera corretta visto che il marshalling dei parametri non è mai una cosa semplice e soprattutto immediata. Il metodo che invochiamo NON può aggiornare lui l'interfaccia grafica. Cioè non posso inserire i valori dei paramentri provenienti dalla parte unmanaged direttamente nelle textbox, per esempio, della GUI. Devo delegare la cosa ad un'altra classe (chiamata "ControlInvoke") di cui parleremo più avanti

6)A questo punto non rimane che invocare il metodi di una particolare classe che penserà lei a invocare il metodo della classe Form (passandogli i parametri provenienti dalla parte unmanaged) deputato all'aggiornamento delle textbox. Questo metodo appartenendo alla classe Form, quindi stesso thread della form, può aggiornare la GUI. E' una questione di "apartment".

Creazione del "Listener thread"

Vediamo come si presenta innanzitutto la windows form:

Al click del bottone creiamo il thread gestito:

 

Il nuovo thread eseguirà il metodo ListenCall() dentro il quale faremo una chiamata alla DLL tramite Platform Invoke. In questa chiamata come input passiamo il nome del metodo di callback (ReceivedCall) che vedremo più avanti. Vediamo come abbiamo definito la Classe NativeClass contenente i metodi corrispondenti alle funzioni esposte dalla DLL:

Buona norma è quella di racchiudere in un unica classe tutte le dichiarazioni Platform Invoke, come è stato fatto qui con la classe NativeClass. Come vediamo è stato dichiarato prima un delegate che sarà l'argomento passato alla parte unmanaged. Questo delegate contiene la firma di un metodo che sarà invocato successivamente al verificarsi dell'evento atteso. Da qui si deduce cha dalla parte unmanaged ci aspettiamo un intero e una stringa. La classe ListenState è un oggetto sul quale ci si sincronizza tra i thread managed (in questo caso ne abbiamo uno solo) per aggiornare eventuali variabili globali all'applicazione. Dalla parte unmanaged ci sarà quindi la funzione ReadyToReceiveCall esposta nella DLL che avrà questa firma:

Come risulta chiaro la funzione accetta un puntatore a funzione. Quest'ultimo sarà il metodo managed invocato successivamente.

Nella prossima sessione vedremo cosa succede nella DLL e come dobbiamo impostare il codice nativo C++

Tags: , , ,

Comments

5/30/2009 6:15:23 PM #

Mobile Marketing

I found this post very intriguing and informative.

Mobile Marketing United States | Reply

10/20/2009 3:10:21 AM #

collier chien aboiement

What is captcha code?, pls provide me captcha code codes or plugin, Thanks in advance.

collier chien aboiement | Reply

12/9/2009 5:38:43 PM #

search engine marketing training

I admire what you have done here.



Regards
Heppner





search engine marketing training United States | Reply

12/26/2009 4:26:24 PM #

Emerson

You made good ideas here. I done a research on the topic and learnt nearly all peoples will agree with your blog.

Emerson United States | Reply

12/27/2009 1:48:13 PM #

Cole

Just wanted to say thanks for this.

Cole United States | Reply

12/30/2009 10:55:50 AM #

Evangeline

Before you can start making decisions about this, you need to know as much as you can about it.  Read on….

Evangeline United States | Reply

1/5/2010 12:26:07 PM #

MaleExtra

This article gives the light in which we can observe the reality. this is very nice one and gives indepth information. thanks for this nice article

MaleExtra United States | Reply

1/28/2010 10:53:49 AM #

louisbweaver80

Most helpful site and information

louisbweaver80 United States | Reply

4/7/2010 8:24:16 AM #

Hulda Cartwright

How you find ideas for articles, I am always lack of new ideas for articles. Some tips would be great

Hulda Cartwright United States | Reply

4/8/2010 11:11:35 PM #

beef pot roast recipe

Admiring the time and effort you put into your blog and detailed information you offer! I will bookmark your blog and have my children check up here often. Thumbs up!

beef pot roast recipe People's Republic of China | Reply

4/9/2010 9:04:09 PM #

Daren Fuhrman

You really make it seem so easy with your presentation but I find this topic to be really something which I think I would never understand. It seems too complicated and very broad for me. I am looking forward for your next post, I will try to get the hang of it!

Daren Fuhrman People's Republic of China | Reply

4/17/2010 6:07:09 PM #

Alda Clothey

Heard about this site from my friend. He pointed me here and told me I’d find what I need. He was right! I got all the questions I had, answered. Didn’t even take long to find it. Love the fact that you made it so easy for people like me. More power

Alda Clothey United States | Reply

4/19/2010 5:19:22 PM #

pink laundry basket

a

pink laundry basket United States | Reply

4/21/2010 9:44:44 PM #

twin bed comforter sets

d

twin bed comforter sets People's Republic of China | Reply

4/22/2010 11:22:31 AM #

Garland Metzger

Stumbled into this site by chance but I’m sure glad I clicked on that link. You definitely answered all the questions I’ve been dying to answer for some time now.  Will definitely come back for more of this. Thank you so much

Garland Metzger United States | Reply

4/23/2010 6:10:45 AM #

miniature digital camera

This blog has definitely changed my perspective on this subject.  Theres no way I wouldve thought about it this way if I hadnt come across your blog.  All I was doing was cruising the web and I found your blog and all of a sudden my views have changed.  Good on you, man!

miniature digital camera United States | Reply

4/23/2010 3:28:52 PM #

vending machine

I want to say that I dont think Ive read anything so true in a long time.  Youve got a lot of great ideas, a great deal of perspective.  I think that you definitely have something important to say and Im gonna back it 110%, man.  Good job keeping this subject alive and interesting!

vending machine United States | Reply

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
Click to change captcha
  • Comment
  • Preview
Loading



Sandro Vecchiarelli

MeLaureato in Scienze dell'informazione a Pisa, si è occupato di analisi e progettazione software per istituti bancari e pubbliche amministrazioni, approfondendo inoltre gli aspetti della programmazione ad oggetti sin dai primi esordi del web in Italia. Certificato MCSE e MCT si occupa anche di elementi legati al networking e alla sicurezza. Svolge un' importante attività di docenza su argomenti riguardanti la piattaforma .NET, XML e Web services. E' autore di 2 corsi di successo: "Windows Server Security"(MIE1311), riguardante gli aspetti legati alla sicurezza della piattaforma Windows Server, e "Ingegneria del software: tecniche per la costruzione di software di qualità" (MIEAU36) dove vengono affrontate le tecniche per scrivere codice il più possibile robusto, riusabile e performante. Negli ultimi anni ha acquisito anche importanti competenze riguardanti prodotti molto complessi quali Microsoft Biztalk Server, oltre ad aver affrontato l'analisi e lo sviluppo di applicazioni in ambienti embedded quali Windows CE e Pocket PC. Nel 2008 è stato nominato MVP Microsoft Windows Mobile, riconfermato nel 2009 e 2010.

Tag cloud

Page List