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

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 閱讀(777) 評論(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>
            久久精品一区四区| 欧美一区成人| 国产精品系列在线播放| 欧美日韩国产小视频| 欧美日韩日本视频| 欧美三区不卡| 国产热re99久久6国产精品| 国产精品爽黄69| 国产亚洲精品久久久| 亚洲福利视频免费观看| 亚洲国内欧美| 亚洲网站视频福利| 久久精品免费播放| 亚洲高清免费| 亚洲最新色图| 久久精品视频导航| 欧美日韩国产一区二区| 国产精品国产三级国产普通话99| 国产欧美精品久久| 亚洲国产综合91精品麻豆| 亚洲视频一区在线观看| 久久婷婷色综合| 韩日精品视频一区| 日韩视频二区| 欧美在线观看一区二区三区| 久久综合九色欧美综合狠狠| 亚洲国产精品精华液网站| 一区二区三区久久网| 久久精品91久久久久久再现| 欧美日韩国产在线| 激情视频亚洲| 亚洲综合清纯丝袜自拍| 老司机一区二区| 亚洲图片在区色| 欧美国产一区二区| 国产欧美在线播放| 一区二区黄色| 欧美福利小视频| 午夜视频一区二区| 欧美视频在线免费看| 一区二区亚洲| 亚洲欧美国产日韩天堂区| 欧美黄色网络| 久久久久久精| 国产一区二区| 久久国产欧美日韩精品| 亚洲午夜小视频| 国产精品国产馆在线真实露脸| 亚洲精品在线三区| 欧美电影免费网站| 久久免费午夜影院| 精久久久久久| 女人色偷偷aa久久天堂| 久久精品2019中文字幕| 国产一区二区日韩精品欧美精品| 性伦欧美刺激片在线观看| 亚洲麻豆av| 欧美高清在线观看| 99av国产精品欲麻豆| 亚洲国产99| 欧美国产第一页| 亚洲人成77777在线观看网| 美女久久网站| 噜噜噜91成人网| 揄拍成人国产精品视频| 鲁大师成人一区二区三区| 欧美一二区视频| 国产主播一区二区三区| 久久久久网站| 久久精视频免费在线久久完整在线看| 国产精品色一区二区三区| 欧美一区免费视频| 亚洲欧美一级二级三级| 韩日欧美一区二区三区| 久久一区二区三区四区| 欧美在线观看网址综合| 一色屋精品视频免费看| 亚洲国产精品一区在线观看不卡 | 猛男gaygay欧美视频| 久久av一区二区三区| 国外成人免费视频| 欧美成人小视频| 欧美日产一区二区三区在线观看| 中日韩男男gay无套| 亚洲欧美日本视频在线观看| 国产亚洲精品aa| 免费欧美网站| 欧美日韩国产综合视频在线观看中文 | 一区二区三区日韩在线观看| 国产精品久久久久久久久免费桃花| 亚洲女优在线| 久久久www成人免费无遮挡大片| 亚洲人体1000| 亚洲影音一区| 亚洲人成在线影院| 亚洲伊人第一页| 亚洲电影在线| 亚洲视频在线免费观看| 国内激情久久| 欧美黄色免费网站| 国产午夜精品一区理论片飘花| 久久一区二区视频| 欧美午夜久久久| 欧美激情日韩| 国产日韩欧美不卡在线| 亚洲精品孕妇| 亚洲高清免费视频| 久久爱www久久做| 亚洲欧美国产另类| 欧美激情一区二区在线| 久久久久久久成人| 国产精品久久久久国产精品日日| 欧美国产免费| 红杏aⅴ成人免费视频| 一区二区三区免费看| 亚洲精品一区二区三| 小黄鸭精品aⅴ导航网站入口| 99国产精品99久久久久久粉嫩| 久久久久九九视频| 久久天天躁狠狠躁夜夜av| 国产精品99一区二区| 亚洲激情视频在线观看| 在线观看日韩精品| 欧美影院成人| 久久精品人人做人人爽电影蜜月| 国产精品高清在线| 亚洲一区精品电影| 亚洲综合成人婷婷小说| 欧美三级视频在线| 99精品国产福利在线观看免费| 亚洲精品男同| 欧美连裤袜在线视频| 亚洲激情国产| 亚洲无毛电影| 国产精品jvid在线观看蜜臀| 日韩视频免费| 亚洲欧美国产va在线影院| 欧美视频精品一区| 欧美一区二区性| 最新69国产成人精品视频免费| 亚洲国产精品va| 免费永久网站黄欧美| 欧美aa国产视频| 一区二区视频在线观看| 欧美专区中文字幕| 久久综合激情| 一区二区三区在线观看国产| 欧美一级大片在线观看| 久久综合给合| 亚洲精品国产欧美| 欧美人与性动交cc0o| 一区二区三区四区蜜桃| 香蕉成人啪国产精品视频综合网| 国产精品婷婷| 久久久精品视频成人| 亚洲经典在线| 欧美专区在线观看一区| 在线观看一区| 欧美激情精品久久久久| 一本高清dvd不卡在线观看| 亚洲欧美一区二区三区久久| 国产精品一卡二卡| 久久精品主播| 日韩性生活视频| 久久久久国产精品www| 亚洲乱码国产乱码精品精天堂| 欧美日韩精品免费看| 欧美影视一区| 一区二区三区|亚洲午夜| 久久精品99国产精品| 亚洲国产精品免费| 国产精品视区| 欧美国产三区| 午夜精品福利一区二区三区av | 一本到12不卡视频在线dvd | 亚洲精品免费电影| 欧美在线看片a免费观看| 在线成人亚洲| 欧美日韩国产在线观看| 性欧美长视频| 亚洲免费观看高清在线观看| 欧美一区国产一区| 日韩一区二区免费看| 国产一区二区三区直播精品电影 | 在线看视频不卡| 欧美日韩成人综合天天影院| 久久国产88| 亚洲视频在线看| 亚洲精品一区在线| 欧美国产免费| 久久亚洲精品欧美| 午夜在线成人av| 中日韩美女免费视频网址在线观看 | 亚洲一区中文| 91久久久亚洲精品| 快播亚洲色图| 久久精品视频免费观看| 另类激情亚洲| 久久久精品午夜少妇| 99热免费精品|