亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C#如何調用原生C++ COM對象詳解

2020-05-23 13:58:15
字體:
來源:轉載
供稿:網友

前言

最近在工作中遇到一個問題,為了跨平臺在.net core中使用COM,不能使用Windows下的COM注冊機制,但是可以直接把IUnknown指針傳給C#,轉換為指針,再轉換為C#的接口(interface)。

做了這方面的研究,但最終我沒有使用這套技術,因為對IDispatch::Invoke的分發太麻煩了,又不能借助ATL與VS開發環境的IDL能力。所以沒有繼續研究事件訂閱(C#是event,C++COM是IConnectionPoint)。

C++中需要做的:

簡單點,實現IDispatch就可以了,全面一點,實現IManagedObject或IProvideClassInfo,后者可是個大工程。

如果我們要實現C#中定義的接口,那么最好給(不給也可以,編譯器會給每個接口一個默認的GUID)接口一個GUID,.net到你的對象QueryInterface時要處理這個IID,把IDispatch指針與S_OK返回即可。

如果跨平臺,把__uuidof換成實際的UUID即可。

struct foo : public IDispatch{  // 通過 IDispatch 繼承  virtual ULONG AddRef(void) override{return 0;}  virtual ULONG Release(void) override{return 0;}    virtual HRESULT QueryInterface(REFIID riid, void ** ppvObject) override     {      if (riid == __uuidof(IUnknown))      {    *ppvObject = (IUnknown*)this;    return S_OK;      }      IID uid;      IIDFromString(L"{C#聲明接口的GUID/IID}", &uid);      if (riid == uid)      {         *ppvObject = (IDispatch*)this;// (IUnknown*)this;         return S_OK;       }       if (riid == __uuidof(IDispatch))       {         *ppvObject = (IDispatch*)this;         return S_OK;       }       return E_NOTIMPL;   }   virtual HRESULT GetTypeInfoCount(UINT * pctinfo) override{return S_OK;}  virtual HRESULT GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo ** ppTInfo) override{return S_OK;}  virtual HRESULT GetIDsOfNames(REFIID riid, LPOLESTR * rgszNames, UINT cNames, LCID lcid, DISPID * rgDispId) override  {        *rgDispId = 1;    return S_OK;  }   virtual HRESULT Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pDispParams, VARIANT * pVarResult, EXCEPINFO * pExcepInfo, UINT * puArgErr) override  {        cout << "be called" << endl;    return S_OK;  }};  

再導出一個DLL的函數把指針給.net運行時

extern "C" __declspec(dllexport)foo* WINAPI GetTestObject(){  return new foo;// 簡單粗暴leak :)}

C#代碼:

[DllImport(@"foo.dll")]static extern IntPtr GetTestObject();  [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)][Guid("your uiid")]interface Test{  int func();} var v = GetTestObject();obj = (Test)Marshal.GetObjectForIUnknown(v);var value = obj.func();// 輸出be called

I love COM

COM思想很重要,COM最近不但活躍在Windows平臺,更是蔓延到了Linux,安卓,iOS等平臺。架構師,程序員應合理利用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
26uuu国产精品视频| 久久人91精品久久久久久不卡| 成人精品久久一区二区三区| 57pao成人国产永久免费| 美日韩在线视频| 久久99视频精品| 亚洲最大福利网站| 国产成人av网址| 久久国产精品网站| 亚洲日韩中文字幕在线播放| 国产在线精品成人一区二区三区| 欧美性20hd另类| 欧美肥老太性生活视频| 91精品国产综合久久香蕉的用户体验| 久久精品亚洲精品| 欧美体内谢she精2性欧美| 欧美在线播放视频| 国产精品视频免费在线| 成人午夜在线观看| 国产精品你懂得| 亚洲精品成a人在线观看| 欧美另类极品videosbest最新版本| 亚洲精品视频中文字幕| 久久精品一本久久99精品| 欧美怡春院一区二区三区| 中文字幕欧美日韩va免费视频| 亚洲欧美激情四射在线日| 美女少妇精品视频| 亚洲成人久久电影| 91精品国产高清久久久久久| 国产亚洲人成a一在线v站| 最近2019年日本中文免费字幕| 日韩久久午夜影院| 日本高清视频一区| 久久婷婷国产麻豆91天堂| 国产成人av网| 北条麻妃一区二区三区中文字幕| 欧美精品情趣视频| 日韩在线观看高清| 国产一区二区三区在线免费观看| 亚洲九九九在线观看| 国产丝袜一区视频在线观看| 欧美性猛交xxxx免费看漫画| 日韩视频永久免费观看| 一区二区三欧美| 亚洲香蕉伊综合在人在线视看| 影音先锋欧美精品| 欧美日韩国产精品专区| 欧美精品videosex极品1| 亚洲第一精品夜夜躁人人爽| 久久精品国产亚洲| 成人精品视频99在线观看免费| 久久黄色av网站| 日韩免费黄色av| 日韩av在线一区二区| 亚洲人成电影在线观看天堂色| 成人免费网视频| 91亚洲精华国产精华| 欧美成人黄色小视频| 日韩欧美视频一区二区三区| 国产成人aa精品一区在线播放| 欧美黑人一区二区三区| 久久久97精品| 亚洲精品中文字幕av| 日韩av男人的天堂| 日韩动漫免费观看电视剧高清| 日韩成人在线视频观看| 黄色一区二区在线| 精品人伦一区二区三区蜜桃网站| 欧美性猛交xxxx乱大交| 3344国产精品免费看| 欧美丰满少妇xxxxx| 日本免费一区二区三区视频观看| 国产精品久久久久77777| 欧美黄色免费网站| 亚洲欧美综合图区| 日韩在线一区二区三区免费视频| 亚洲香蕉av在线一区二区三区| 国产精品久久久久不卡| 欧美精品videofree1080p| 最近2019年日本中文免费字幕| 九九精品在线观看| 91久热免费在线视频| 精品高清美女精品国产区| 欧美日韩国产成人在线观看| 国产成人精品综合久久久| 亚洲偷熟乱区亚洲香蕉av| 欧美一区三区三区高中清蜜桃| 日韩视频免费在线| 亚洲精品欧美日韩专区| 国产精品直播网红| 日本久久久久久久久久久| 日韩av最新在线| 亚洲色图色老头| 91大神福利视频在线| 久久久国产精品免费| 欧美激情免费视频| 成人网址在线观看| 91精品视频观看| 国产一区欧美二区三区| www.日韩不卡电影av| 欧美黑人xxx| 亚洲一区二区久久久久久| 7777kkkk成人观看| 正在播放欧美一区| 国产精品久久久久久久久久久久| 亚洲欧洲国产伦综合| 成人网中文字幕| 日韩美女av在线| 国产精品第1页| 亚洲另类图片色| 日韩中文字幕免费视频| 国产精品免费看久久久香蕉| 91久久久久久久久久久久久| 欧美日韩国产丝袜另类| 亚洲欧美综合区自拍另类| 九九热这里只有在线精品视| 亚洲欧洲国产伦综合| 久久久久久久国产精品视频| 超碰97人人做人人爱少妇| 久久综合伊人77777蜜臀| 日韩精品视频在线观看网址| www国产亚洲精品久久网站| 日韩美女视频免费在线观看| 成人欧美一区二区三区黑人孕妇| 中文字幕在线观看日韩| 欧美日韩亚洲激情| 最好看的2019的中文字幕视频| 另类色图亚洲色图| 亚洲色图狂野欧美| 亚洲国产精品人人爽夜夜爽| 26uuu久久噜噜噜噜| 国产自摸综合网| 日韩精品在线观看一区| 日产日韩在线亚洲欧美| 亚洲精品国产成人| 北条麻妃99精品青青久久| 欧美国产亚洲精品久久久8v| 日韩欧美国产激情| www.亚洲一区| 精品中文字幕在线2019| 亚洲午夜久久久久久久| 国产欧美亚洲精品| 日韩美女写真福利在线观看| 亚洲国产成人精品久久| 国产成+人+综合+亚洲欧美丁香花| 欧美精品videosex牲欧美| 欧美黑人一级爽快片淫片高清| 久久久久久av| 亚洲美腿欧美激情另类| 亚洲美女福利视频网站| 亚洲japanese制服美女| 欧美第一黄网免费网站| 亚洲国产精品系列| 成人免费直播live| 插插插亚洲综合网| 最近2019中文字幕大全第二页| 精品久久久久久中文字幕| 亚洲乱码av中文一区二区| 亚洲视频在线观看视频| 精品女同一区二区三区在线播放| 国产成+人+综合+亚洲欧美丁香花| 揄拍成人国产精品视频| 国产精品大片wwwwww|