青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::
D語言里面,可以通過version(Windows)來兼容COM接口,不過對于__uuidof卻沒有相應實現。

原始COM接口定義類似這樣(找個簡單的):

[
????local,
????
object,
????uuid(594f31d0
-7f19-11d0-b194-00a0c90dc8bf)
]
interface?IRpcChannelBuffer2?:?IRpcChannelBuffer
{

????HRESULT?GetProtocolVersion
????(
????????[
in,out]?DWORD?*pdwVersion
????);
}

VC++中可通過__uuidof操作符來獲取COM接口中的uuid“元”信息。

轉換為D接口后代碼如下:

version(Windows)?{

interface?IRpcChannelBuffer2?:?IRpcChannelBuffer
{
????HRESULT?GetProtocolVersion?(DWORD
*?pdwVersion);
}

}

失去了uuid信息。只要稍作修改,在轉換時保存uuid,即可以模板來模擬實現__uuidof操作符。

import?std.c.windows.com;
import?std.
string;
import?std.stdio;

private:

template?HexStrToUbyte(
char[]?str)
{
????
const?ubyte?HexStrToUbyte?=?cast(ubyte)HexStrToUlong!(str);
}

template?HexStrToUshort(
char[]?str)
{
????
const?ushort?HexStrToUshort?=?cast(ushort)HexStrToUlong!(str);
}

template?HexStrToUint(
char[]?str)
{
????
const?uint?HexStrToUint?=?cast(uint)HexStrToUlong!(str);
}

template?HexStrToUlong(
char[]?str)
{
????
static?if?(str.length?==?1)
????????
const?ulong?HexStrToUlong?=?HexToUbyte!(str[0..1]);
????
else
????????
const?ulong?HexStrToUlong?
????????????
=?HexToUbyte!(str[length-1..length])?
??????????????
+?16UL?*?HexStrToUlong!(str[0..length-1]);
}

private:

template?HexToUbyte(
char[]?c)
{
????
static?if?(c[0]?>=?'0'?&&?c[0]?<=?'9')
????????
const?ubyte?HexToUbyte?=?c[0]?-?'0';
????
else?static?if?(c[0]?==?'A'?||?c[0]?==?'a')
????????
const?ubyte?HexToUbyte?=?0xa;
????
else?static?if?(c[0]?==?'B'?||?c[0]?==?'b')
????????
const?ubyte?HexToUbyte?=?0xb;
????
else?static?if?(c[0]?==?'C'?||?c[0]?==?'c')
????????
const?ubyte?HexToUbyte?=?0xc;
????
else?static?if?(c[0]?==?'D'?||?c[0]?==?'d')
????????
const?ubyte?HexToUbyte?=?0xd;
????
else?static?if?(c[0]?==?'E'?||?c[0]?==?'e')
????????
const?ubyte?HexToUbyte?=?0xe;
????
else?static?if?(c[0]?==?'F'?||?c[0]?==?'f')
????????
const?ubyte?HexToUbyte?=?0xf;
}

template?HexToUbyte_bug(
char?c)
{
????
static?if?(c?>=?'0'?&&?c?<=?'9')
????????
const?ubyte?HexToUbyte1?=?c?-?'0';
????
else?static?if?(c?==?'A'?||?c?==?'a')
????????
const?ubyte?HexToUbyte1?=?0xa;
????
else?static?if?(c?==?'B'?||?c?==?'b')
????????
const?ubyte?HexToUbyte1?=?0xb;
????
else?static?if?(c?==?'C'?||?c?==?'c')
????????
const?ubyte?HexToUbyte1?=?0xc;
????
else?static?if?(c?==?'D'?||?c?==?'d')
????????
const?ubyte?HexToUbyte1?=?0xd;
????
else?static?if?(c?==?'E'?||?c?==?'e')
????????
const?ubyte?HexToUbyte1?=?0xe;
????
else?static?if?(c?==?'F'?||?c?==?'f')
????????
const?ubyte?HexToUbyte1?=?0xf;
}

template?IIDFromStr(
char[]?str)
{
????
const?IID?IIDFromStr?=?{
????????HexStrToUint
!(str[0..8]),
????????HexStrToUshort
!(str[9..13]),?
????????HexStrToUshort
!(str[14..18]),
????????[
??????????HexStrToUbyte
!(str[19..21]),
??????????HexStrToUbyte
!(str[21..23]),?
??????????HexStrToUbyte
!(str[24..26]),
??????????HexStrToUbyte
!(str[26..28]),?
??????????HexStrToUbyte
!(str[28..30]),
??????????HexStrToUbyte
!(str[30..32]),?
??????????HexStrToUbyte
!(str[32..34]),
??????????HexStrToUbyte
!(str[34..36])
????????]
????};
}

template?__uuidof(T:IUnknown)
{
????IID?__uuidof?
=?IIDFromStr!("00000000-0000-0000-C000-000000000046");
}

template?__uuidof(T:IClassFactory)
{
????IID?__uuidof?
=?IIDFromStr!("00000001-0000-0000-C000-000000000046");
}


void?main()
{
????IID?iu??
=?__uuidof!(IUnknown);
????IID?icp?
=?__uuidof!(IClassFactory);

????writefln(iu.Data1);
????writefln(iu.Data2);
????writefln(iu.Data3);
????writefln(iu.Data4);
}

如上面代碼,接口在轉換時,把:

[
????local,
????
object,
????uuid(594f31d0
-7f19-11d0-b194-00a0c90dc8bf)
]
interface IRpcChannelBuffer2 : IRpcChannelBuffer
{

??? HRESULT GetProtocolVersion
??? (
??????? [in,out] DWORD *pdwVersion
??? );
}


轉換為:

template?__uuidof(T:IRpcChannelBuffer2)
{
????IID?__uuidof?
=?IIDFromStr!("594f31d0-7f19-11d0-b194-00a0c90dc8bf");
}
version?(Windows)?{

interface?IRpcChannelBuffer2?:?IRpcChannelBuffer?{
????HRESULT?GetProtocolVersion?(DWORD
*?pdwVersion);
}

}

即可,這個可以交由自動化工具完成。

由于__uuidof模板值在編譯期決議,沒有實際的運行期開銷。
posted on 2006-04-11 14:26 qiezi 閱讀(782) 評論(0)  編輯 收藏 引用 所屬分類: D
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲免费视频成人| 久久久久综合一区二区三区| 亚洲性夜色噜噜噜7777| 亚洲香蕉视频| 午夜精品久久久久久久久久久久久| 亚洲男人av电影| 欧美亚洲免费高清在线观看| 欧美亚洲系列| 久久资源av| 欧美大片在线看| 亚洲精品黄网在线观看| 日韩午夜av| 亚洲女性裸体视频| 久久久久国产精品一区二区| 蜜桃精品一区二区三区| 欧美日产国产成人免费图片| 欧美亚洲第一页| 国产一区二区三区奇米久涩| 亚洲黄色尤物视频| 亚洲视频在线观看网站| 欧美综合国产| 亚洲第一天堂av| 一区二区三区精品视频在线观看| 午夜电影亚洲| 久热综合在线亚洲精品| 欧美日韩另类丝袜其他| 国产欧美一区二区三区久久| 在线观看一区视频| 亚洲午夜精品久久久久久app| 欧美在线视频导航| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲日韩视频| 先锋影音国产一区| 欧美福利视频一区| 国产精品视频内| 亚洲黄色高清| 欧美一激情一区二区三区| 欧美成人中文| 亚洲午夜伦理| 蜜桃久久精品乱码一区二区| 欧美性感一类影片在线播放 | 美日韩精品免费观看视频| 亚洲区欧美区| 欧美在线高清| 欧美手机在线视频| 在线成人中文字幕| 亚洲欧美日韩一区在线| 欧美激情精品久久久久久变态| 亚洲在线免费观看| 欧美华人在线视频| 韩国在线一区| 亚洲欧美日本另类| 亚洲高清视频中文字幕| 欧美亚洲一区二区在线观看| 欧美激情一区二区三区成人| 国产在线乱码一区二区三区| 亚洲午夜av电影| 欧美国产日韩a欧美在线观看| 亚洲免费一区二区| 欧美日本亚洲| 亚洲激情在线观看| 久久久久国产一区二区三区| 中文在线资源观看网站视频免费不卡 | 亚洲综合另类| 欧美精品色综合| 在线观看日韩精品| 久久精品视频va| 中国日韩欧美久久久久久久久| 欧美电影美腿模特1979在线看| 国语自产精品视频在线看| 亚洲综合激情| 亚洲裸体视频| 欧美高清你懂得| 亚洲国产va精品久久久不卡综合| 久久精品视频在线免费观看| 亚洲伊人色欲综合网| 欧美日韩一级黄| 日韩亚洲欧美成人一区| 亚洲高清一区二区三区| 久久婷婷国产综合国色天香| 国内精品福利| 久久天堂精品| 久久国产黑丝| 国产婷婷色综合av蜜臀av | 一区二区三区蜜桃网| 欧美久久久久久久久久| 日韩午夜电影av| 亚洲韩国青草视频| 欧美激情aaaa| 99精品视频免费| 亚洲精品一品区二品区三品区| 欧美激情第三页| 日韩一级免费| 99精品免费网| 国产精品久久福利| 亚洲欧美大片| 亚洲欧美成人网| 国产色产综合色产在线视频| 久久精品国产2020观看福利| 欧美一区二区三区精品电影| 国产视频一区欧美| 久久躁狠狠躁夜夜爽| 久久久久久9999| 亚洲国产精品一区| 亚洲国产日韩欧美在线99| 欧美激情影院| 亚洲一区999| 亚洲在线一区二区三区| 国产亚洲欧美在线| 欧美成年人网站| 欧美激情第3页| 亚洲午夜黄色| 亚洲欧美精品在线观看| 国产主播一区二区| 欧美福利一区二区三区| 欧美精品免费在线观看| 亚洲综合色视频| 欧美一级片在线播放| 亚洲福利av| 99这里只有精品| 国产视频自拍一区| 欧美国产精品专区| 欧美日韩免费看| 欧美一区二区三区成人| 久久一日本道色综合久久| 99日韩精品| 亚洲欧美日韩精品| 亚洲国产91| 亚洲视频一区二区在线观看| 国内一区二区在线视频观看| 亚洲盗摄视频| 国产精品区一区二区三区| 老司机免费视频一区二区| 欧美激情aaaa| 久久国产婷婷国产香蕉| 欧美成年人视频网站| 亚洲欧美中文在线视频| 久久久夜夜夜| 亚洲一区二区日本| 久久久久99| 亚洲一区久久| 久久在线视频在线| 亚洲综合视频一区| 久久中文久久字幕| 亚洲欧美韩国| 美女精品在线观看| 欧美一级大片在线观看| 欧美夫妇交换俱乐部在线观看| 午夜精品久久久久久久蜜桃app| 久久综合九色| 欧美一级网站| 欧美老女人xx| 久久一区二区精品| 国产精品毛片va一区二区三区| 欧美激情精品久久久久久变态| 国产乱码精品一区二区三区忘忧草| 亚洲国产精品久久久久| 国产一区在线免费观看| 99riav1国产精品视频| 亚洲国产欧美精品| 午夜精品国产更新| 亚洲午夜女主播在线直播| 裸体歌舞表演一区二区| 久久国产日韩欧美| 欧美三级日本三级少妇99| 欧美激情一区二区三级高清视频| 国产欧美在线观看| 99精品久久| 亚洲精品日日夜夜| 久久久久久日产精品| 欧美一区二区日韩一区二区| 欧美欧美全黄| 亚洲第一综合天堂另类专| 国内久久视频| 新狼窝色av性久久久久久| 亚洲一区二区少妇| 欧美剧在线免费观看网站| 欧美福利网址| 在线精品一区| 久久精品亚洲| 久久久久国产精品www| 国产精品男女猛烈高潮激情| 日韩午夜在线电影| 99精品欧美一区二区三区综合在线| 久久一二三四| 欧美xx视频| 在线观看视频一区二区欧美日韩 | 亚洲欧洲综合| 亚洲激情黄色| 免费亚洲电影在线观看| 蜜桃久久精品乱码一区二区| 国产婷婷一区二区| 欧美一级二级三级蜜桃| 欧美呦呦网站| 国产农村妇女精品一二区| 亚洲一区二区三区精品在线| 亚洲在线视频| 国产精品视频免费观看| 一区二区三区视频在线观看| 中文精品视频|