序言
本文介紹一個(gè)C++如何調(diào)用C#開(kāi)發(fā)的dll實(shí)例。
前言
C++編寫的程序?yàn)榉峭泄艽a,C#編寫的程序?yàn)橥泄艽a。托管代碼雖然提供了其他開(kāi)發(fā)平臺(tái)沒(méi)有的許多優(yōu)勢(shì),但由于前期系統(tǒng)及歷史版本很多使用的是非托管代碼編寫的程序,所以CLR提供了一些機(jī)制,允許在應(yīng)用程序中同時(shí)包含托管和非托管代碼。具體說(shuō)分為以下三種:
托管代碼能調(diào)用DLL中的非托管函數(shù)。通過(guò)P/Invoke(Platform Invoke)機(jī)制調(diào)用DLL中的函數(shù),如Kernel32.dll等。
托管代碼可以使用現(xiàn)有COM組件(服務(wù)器)。許多公司都已經(jīng)實(shí)現(xiàn)了大量非托管COM組件。利用來(lái)自這些組件的類型庫(kù),可創(chuàng)建一個(gè)托管程序集來(lái)描述COM組件。托管代碼可像訪問(wèn)其他任何類型一樣訪問(wèn)托管程序集中的類型。
非托管代碼可以使用托管類型(服務(wù)器)。許多現(xiàn)有的非托管代碼要求提供COM組件來(lái)確保代碼正確工作。使用托管代碼可以更簡(jiǎn)單地實(shí)現(xiàn)這些組件,避免所有代碼都不得不和引用計(jì)數(shù)和接口打交道。比如C++調(diào)用C#開(kāi)發(fā)的dll。
以上部分文字摘自《CLR via C#》,會(huì)比較難懂點(diǎn)。剛好工作中有通過(guò)C++調(diào)用C#開(kāi)發(fā)的dll的經(jīng)驗(yàn),也就是上述第3點(diǎn)。所以想借此文記錄下開(kāi)發(fā)的步驟和思路。后續(xù)有時(shí)間再把上述的1、2點(diǎn)補(bǔ)上,形成一個(gè)系列文章。
正文
1、用C#編寫dll
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26