当前位置: 首页 > news >正文

电子网站建设基本流程图山西云起时网站建设

电子网站建设基本流程图,山西云起时网站建设,县建设局 协会网站,谁有免费网址发给我谢谢原文 感谢任意见解.细节: >dmd --version DMD64 D Compiler v2.107.0参考: ComObject类 IUnknown接口 我只使用了ComObject类和隐式继承了IUnknown接口,用用ImportC编译并包含以下内容的comheaders.c编写了一些COM测试代码. #define WINVER 0x0A00 #define _WIN32_WINNT…

原文

感谢任意见解.细节:

>dmd --version
DMD64 D Compiler v2.107.0

参考:
ComObject
IUnknown接口

我只使用了ComObject类和隐式继承了IUnknown接口,用用ImportC编译并包含以下内容的comheaders.c编写了一些COM测试代码.

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00
#define _WIN32_DCOM
#include <wtypes.h>
#include <oleauto.h>
#include <oaidl.h>

用来编译的main.d文件如下.

import std.stdio;
import comheaders;
static import com = core.sys.windows.com;
pragma(lib, "onecore"); //修复两个不相关符号的链接
void main() {auto COMobject = new com.ComObject();//auto COMobject = new ComObject();IUnknown* ip = cast(IUnknown*)COMobject;writeln(COMobject.count);writeln("       ip 虚表: ", ip.lpVtbl);auto 虚表 = COMobject.__vptr;writeln("COMobject 虚表: ", 虚表);writeln("ip &AddRef: ", &ip.lpVtbl.AddRef);writeln("ip offset: ", cast(void*)&ip.lpVtbl.AddRef - cast(void*)ip.lpVtbl);auto ipaddref = cast(void*)ip.lpVtbl.AddRef;writeln("       ip AddRef: ", ipaddref);auto addref = cast(void*)(&COMobject.AddRef).funcptr;writeln("COMobject AddRef: ", addref);writeln("COMobject AddRef : ip AddRef offset: ", addref - ipaddref);COMobject.AddRef();writeln(COMobject.count);ip.lpVtbl.AddRef(ip);writeln(COMobject.count);
}

在此,我从静态导入的core.sys.windows.com创建了一个ComObject,但避免使用D窗口库中的其他内容.该对象包含一个应调用AddRef递增的引用计数.输出如下.

0ip 虚表: 7FF756091A30
COMobject 虚表: 7FF756091A30
ip &AddRef: 7FF756091A38
ip offset: 8ip AddRef: 7FF756027970
COMobject AddRef: 7FF756022EC0
COMobject AddRef : ip AddRef offset: -19120
1
1

即,正确偏移的AddRef调用未干活,且与com.ComObjectAddRef函数指针不同.因此,无法同外部世界代码正常工作.用

dmd main.d comheaders.c vcintrinsics.lib -P/wd5105

编译,vcintrinsics.lib是我构建的解决DMD不知道一系列MSVC内部函数的问题的一个库,即按此处满足链接器的,而-P/wd5105是在ImportC用作C预处理器时,用来抑制MSVC警告.

我在unknwn.d中,复制了不方便命名IUnknown接口的源码,并从com.d复制了ComObject类的源码,两者都在C:\D\dmd2\src\druntime\src\core\sys\windows\中.

进入main.d底部并实验.我用上面活动的注释行,新建了个本地ComObject.一项更改解决了该问题:使用extern(C++),其他链接属性不工作.

这是工作代码.我不得不编辑IUnknown接口,但现在是comheaders.c中的一个结构,在QueryInterface中,并编辑到IUnknown*,并把E_NOINTERFACE编辑到com.E_NOINTERFACE.

并用与IUnknown结构不同的名字定义D接口,所以我设置它为_IUnknown_,但除此外,除了不使用extern(Windows)并以extern(C++)前缀外,源码不变.
这是main.d的其余部分.

import core.atomic;
extern(C++):
interface _IUnknown_ {HRESULT QueryInterface(IID* riid, void** pvObject);ULONG AddRef();ULONG Release();
}
class ComObject : _IUnknown_
{HRESULT QueryInterface(const(IID)* riid, void** ppv){if (*riid == IID_IUnknown){*ppv = cast(void*)cast(IUnknown*)this;AddRef();return S_OK;}else{   *ppv = null;return com.E_NOINTERFACE;}}ULONG AddRef(){return atomicOp!"+="(*cast(shared)&count, 1);}ULONG Release(){LONG lRef = atomicOp!"-="(*cast(shared)&count, 1);if (lRef == 0){//`free`对象,如果删除该对象,则从`Release()`返回时调用的`postinvariant`将失败.让`GC`收获吧.`删 本;`return 0;}return cast(ULONG)lRef;}LONG count = 0;//对象引用计数
}

现在如下输出:

0ip 虚表: 7FF76B9C0360
COMobject 虚表: 7FF76B9C0360
ip &AddRef: 7FF76B9C0368
ip offset: 8ip AddRef: 7FF76B951580
COMobject AddRef: 7FF76B951580
COMobject AddRef : ip AddRef offset: 0
1
2

显示在ComObjects虚表中,查找AddRef会生成与通过COM接口相同的函数指针,且两者都工作.

工作假设:通过导入core.sys.windows.com引入的ComObjectIUnknown都被破坏了,这是Phobos中对COM的所有支持.请确认或拒绝.

错误地声明了接口变量.试试如下:

auto COMobject = new com.ComObject();
//auto COMobject = new ComObject();
IUnknown ip = COMobject;
writeln(COMobject.count);
writeln("       ip 虚表: ", ip.lpVtbl);
auto 虚表 = COMobject.__vptr;
writeln("COMobject 虚表: ", 虚表);
writeln("ip &AddRef: ", &ip.lpVtbl.AddRef);
writeln("ip offset: ", cast(void*)&ip.lpVtbl.AddRef - cast(void*)ip.lpVtbl);
auto ipaddref = cast(void*)ip.lpVtbl.AddRef;
writeln("       ip AddRef: ", ipaddref);
auto addref = cast(void*)(&COMobject.AddRef).funcptr;
writeln("COMobject AddRef: ", addref);
writeln("COMobject AddRef : ip AddRef offset: ", addref - ipaddref);
COMobject.AddRef();
writeln(COMobject.count);
ip.lpVtbl.AddRef(ip);
writeln(COMobject.count);
http://www.yayakq.cn/news/322823/

相关文章:

  • 北京建网站公司响应式网站开发步骤
  • 做推广的网站微信号软装公司
  • 网站建设交易中心哪个网站可以做优惠券
  • 自适应网站模板企业wordpress 导航栏
  • 金融网站建设方案ppt苍南网站建设shaoky
  • 网站的推广费用wordpress全站301
  • 陕西省建设厅便民服务网站企业网站做的比较好
  • 女人动漫做受网站优设网app手机下载
  • 学校培训网站建设渝北网站建设
  • 化妆品网站设计欣赏wordpress文章插件
  • 手机网站开发之列表开发工业产品设计与创客实践赛题库
  • wordpress建站优化厦门u 网站建设
  • 需要推销自己做网站的公司我的网站百度怎么搜索不到了
  • 邢台提供网站建设公司电话静态网站特点
  • 做网站的价格是多少成都网站营销推广公司
  • 网站建设效果图企业门户网站建设方案书
  • dede 后门暴网站建立一个网站的前期资金
  • 电子工厂网站建设用ssh做网站
  • 老网站改版做别的天津手机网站建设制作
  • 个人网站策划书模板网站后台管理系统制作教程
  • 昆山开发区网站制作百度官网认证多少钱一年
  • 冷门行业做网站的优势海外营销网站建设
  • 学校网站建设开发商wordpress 单页面模板
  • 商务网站要怎么设计cn域名网站
  • 怎么做网站标题优化免费空间搭建免费小说网站
  • 门户网站登录入口网页设计代码水平对齐属性align
  • 四川网站建设价格大连网站空间
  • 黄骅贴吧金宝海南搜索引擎优化
  • 沃尔玛官方网站查余额网站建设预算项目
  • 网站建设与维护 实训WordPress站点地图代码