Microsoft .NET Compact Framework 上的高級 PInvoke

Microsoft .NET Compact Framework 上的高級 PInvoke

ID:37276792

大小:117.00 KB

頁數(shù):17頁

時(shí)間:2019-05-20

Microsoft .NET Compact Framework 上的高級 PInvoke_第1頁
Microsoft .NET Compact Framework 上的高級 PInvoke_第2頁
Microsoft .NET Compact Framework 上的高級 PInvoke_第3頁
Microsoft .NET Compact Framework 上的高級 PInvoke_第4頁
Microsoft .NET Compact Framework 上的高級 PInvoke_第5頁
資源描述:

《Microsoft .NET Compact Framework 上的高級 PInvoke》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、Microsoft.NETCompactFramework上的高級P/Invoke發(fā)布日期:10/29/2004

2、更新日期:10/29/2004JonBox,DanFoxQuilogy編著:JonathanWellsMicrosoftCorporation適用于:Microsoft_.NETCompactFramework1.0Microsoft_VisualStudio_.NET2003摘要:探討.NETCompactFramework的高級互操作性。本頁內(nèi)容簡介封送處理復(fù)雜類型封送處理結(jié)構(gòu)中

3、的字符串封送處理結(jié)構(gòu)中的定長字符串小結(jié)簡介在上一篇文章“Microsoft.NETCompactFramework上的P/Invoke和封送處理簡介”中,我們討論了Microsoft.NETCompactFramework和Microsoft.NETFramework中的平臺調(diào)用服務(wù)如何允許托管代碼調(diào)用駐留在非托管DLL中的函數(shù),進(jìn)而允許自定義以及操作系統(tǒng)(WindowsCE)API可由為上述任何一種框架編寫的應(yīng)用程序訪問。雖然此服務(wù)的很多功能在這兩種框架中都是一樣的,但由于.NETCompac

4、tFramework是完整的.NETFramework的一個(gè)子集,所以存在一些差異,有些差異我們已經(jīng)在上一篇文章中進(jìn)行了探討。在本白皮書中,我們將集中討論在封送處理結(jié)構(gòu)時(shí)產(chǎn)生的兩個(gè)特定問題,以及在.NETCompactFramework中如何對它們進(jìn)行處理。返回頁首封送處理復(fù)雜類型正如上一篇文章中所提及的,.NETCompactFramework中的封送拆收器和完整的.NETFramework中的封送拆收器之間的一個(gè)主要差異是:較輕型的.NETCompactFramework封送拆收器不能封送處

5、理結(jié)構(gòu)或類中的復(fù)雜對象(引用類型)。這就意味著,如果結(jié)構(gòu)或類中有字段定義為在.NETCompactFramework和非托管代碼之間不存在通用表示形式的類型(稱為blittable類型,這些類型在上一篇文章中列出),則該結(jié)構(gòu)或類不能被完全地進(jìn)行封送處理。從實(shí)際的角度來說,這意味著包含字符串指針或者定長字符緩沖的結(jié)構(gòu)或類均不能被正確地封送處理。作為一個(gè)例子,請考慮WindowsCE上可用的用戶通知API。使用此API,應(yīng)用程序可以在特定的時(shí)間,或者在響應(yīng)某個(gè)事件(比如同步)時(shí),或者在更換PC卡時(shí),

6、顯示通知對話框或引發(fā)某個(gè)應(yīng)用程序的執(zhí)行。因?yàn)?NETCompactFramework不包括執(zhí)行此功能的托管類,所以需要該功能的開發(fā)人員就需要使用P/Invoke進(jìn)行正確的操作系統(tǒng)調(diào)用。要使用WindowsCE通知API(CeSetUserNotificationEx),用于定義什么事件激活此通知的結(jié)構(gòu)(CE_NOTIFICATION_TRIGGER)需要在托管代碼中進(jìn)行聲明,并在VB.NET中進(jìn)行如下的直接轉(zhuǎn)換,其中SYSTEMTIME是另一個(gè)完全由blittable類型組成的結(jié)構(gòu),Notifi

7、cationTypes和EventTypes是映射至整數(shù)的枚舉。PrivateStructureCE_NOTIFICATION_TRIGGERDimdwSizeAsIntegerDimdwTypeAsNotificationTypesDimdwEventAsEventTypesDimlpszApplicationAsStringDimlpszArgumentsAsStringDimstartTimeAsSYSTEMTIMEDimendTimeAsSYSTEMTIMEEndStructure不幸的

8、是,用于指定要執(zhí)行的應(yīng)用程序及其命令行參數(shù)的兩個(gè)字符串值在非托管代碼中定義為指向以null終止的Unicode字符串(WCHAR*)的指針。因此,.NETCompactFramework封送拆收器不能正確地封送處理該結(jié)構(gòu),因?yàn)镾tring是引用類型(System.String)。注正如我們上一篇文章所提及的,System.String在.NETCompactFramework中是blittable類型,因?yàn)樗凶址梢暈閁nicode。但是,這只在將String直接傳遞給非托管函數(shù)時(shí)才適用,

9、字符串用在結(jié)構(gòu)或類中時(shí)并非如此。在完整的.NETFramework中,封送拆收器可以處理這種情況,因?yàn)樗琈arshalAsAttribute。使用此屬性,該結(jié)構(gòu)可被重寫為:PrivateStructureCE_NOTIFICATION_TRIGGERDimdwSizeAsIntegerDimdwTypeAsNotificationTypesDimdwEventAsEventTypesDimlpszApplicationAsSt

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。