问题列表 - 第31156页

Delphi:如何实现IUnknown的QueryInterface?

在Delphi中,IUnknown声明为:

function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
Run Code Online (Sandbox Code Playgroud)

注意:输出参数是无类型的

在我的TInterfacedObject后代我需要处理QueryInterface,所以我可以返回一个支持所请求的接口的对象:

function TFoo.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
   if IsEqualGUID(IID, IFooBar) then
   begin
      Obj := (TFooBar.Create(Self) as IFooBar);
      Result := S_OK;
   end
   else
      Result := inherited QueryInterface(IID, {out}Obj);
end;
Run Code Online (Sandbox Code Playgroud)

问题就出现了:

Obj := (TFooBar.Create(Self) as IFooBar);
Run Code Online (Sandbox Code Playgroud)

德尔福抱怨:

运算符不适用于此操作数类型

显然我不知道如何或分配给无类型 out参数.我可以随意尝试,希望编译器停止抱怨:

Obj := TFooBar.Create(Self);

Obj := Pointer(TFooBar.Create(Self));

Obj := Pointer(TFooBar.Create(Self) as IFooBar);
Run Code Online (Sandbox Code Playgroud)

忽略我写的所有代码(如果需要):我如何QueryInterface在对象后代中实现TInterfacedObject


我一直试图解决的真正问题可归结为我想:

我想覆盖接口中的方法

以同样的方式:

TList = …
Run Code Online (Sandbox Code Playgroud)

delphi interface queryinterface iunknown

11
推荐指数
1
解决办法
7934
查看次数

如何交换价值?

可能重复:
在C中交换值的最快方法是什么?

如何在不使用第三个变量的情况下交换两个变量的值?

我想交换(交换)两个变量的值ab.

c++

0
推荐指数
2
解决办法
1345
查看次数

5
推荐指数
3
解决办法
1万
查看次数

如果没有使用,浏览器会缓存CSS背景图像吗?

当你有两个这样的规则:

.foo {
  background-image: url(foo.gif);
}

.foo {
  background-image: url(bar.gif);
}
Run Code Online (Sandbox Code Playgroud)

并有 <div class='foo'>Foobar</div>

您的浏览器会同时缓存,还是仅实际显示(bar.gif在这种情况下)?

在所有设置中都是如此吗?(规则在不同的文件中,!important适用于一个,等等)

css caching

7
推荐指数
1
解决办法
4045
查看次数

字符串文字与C中的const char*

为什么ANSI C编译器不会在函数调用中标记字符串文字参数的使用,其中相关参数没有const限定符?例如,以下代码可以通过尝试写入只读内存来生成异常.

void somefunc(char buffer[10]);

void somefunc(char buffer[10]) {
    int i;

    for (i = 0;   i < 10;   i++)
       buffer[i] = 0;
}

int main(int argc, char **argv) {

    somefunc("Literal");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这种情况可以在编译时识别,但VS2010和gcc似乎没有这样做.使用const char*参数调用somefunc将生成编译器警告.

c

10
推荐指数
4
解决办法
2445
查看次数

GC如何清理结构?

我认为GC可能会以不同方式处理引用类型和值类型.

如果没有人参考,GC将收集参考类型.GC会收集类似struct的值类型吗?我的结构不小.我希望尽可能早地收集它.使用分析器软件,我看到结构有很大的积累,并且是主要的内存消耗.

.net c#

1
推荐指数
1
解决办法
593
查看次数

正则表达式从字符串中删除所有特殊字符?

我完全没有正则表达式,所以我需要一些帮助来解决我认为最好通过使用正则表达式来解决的问题.

我在C#中有字符串列表:

List<string> lstNames = new List<string>();
lstNames.add("TRA-94:23");
lstNames.add("TRA-42:101");
lstNames.add("TRA-109:AD");

foreach (string n in lstNames) {
  // logic goes here that somehow uses regex to remove all special characters
  string regExp = "NO_IDEA";
  string tmp = Regex.Replace(n, regExp, "");
}
Run Code Online (Sandbox Code Playgroud)

我需要能够遍历列表并返回每个项目而没有任何特殊字符.例如,第一项是"TRA9423",第二项是"TRA42101",第三项是TRA109AD.

是否有正则表达式可以为我完成此操作?

此外,该列表包含超过4000个项目,因此我需要搜索和替换,以尽可能高效和快速.

编辑:我应该指定az,AZ和0-9旁边的任何字符在我的环境中都是特殊的.

c# regex string

62
推荐指数
5
解决办法
20万
查看次数

怀疑在构造函数中工作的一个缺点

我正在阅读谷歌C++风格指南,并在"在构造函数中的工作"部分感到困惑.在构造函数中做繁重工作的缺点之一是:

如果工作调用虚函数,则不会将这些调用分派给子类实现.即使你的类目前没有被子类化,你的类的未来修改也可以悄悄地引入这个问题,造成很多混乱.

我不明白这意味着什么.有人可以提供解释,为什么这可能被认为是一个缺点?

c++

7
推荐指数
1
解决办法
423
查看次数

什么时候课程太大或太小?

我最近由我公司的一位高级开发人员审核了我的代码.他批评我的设计使用了太多的课程.我很想听听你的反应.

我的任务是创建一个服务,该服务生成一个xml文件,因为它操作了3个其他xml文件.我们将这些命名为aaa.xml,bbb.xmlccc.xml.该服务分两个阶段进行.在第一阶段,它针对bbb.xml清理aaa.xml.在第二阶段,它将第一阶段的产品与ccc.xml合并以产生最终结果.

我选择了一个包含三个类的设计:一个XmlService类,它使用了另外两个类,一个scrubber类和一个merger类.我保持擦洗和合并类是分开的,因为这两个类都很大并且具有不同的逻辑.

我认为我的方法很好,因为它让我的课程变得小而有凝聚力.我的方法也有助于控制我的测试类的大小.

高级开发人员断言,清理和合并类只能由XmlService类使用,因此应该是它的一部分.他觉得这会使XMLService具有凝聚力,这就是他所说的具有凝聚力的意思.他还认为以这种方式分手,会使他们松散凝聚力.

具有讽刺意味的是,我试图打破这些课程以达到凝聚力.你怎么看?谁对或错?我们都对吗?谢谢你的建议.

oop

18
推荐指数
2
解决办法
2060
查看次数

在jquery中mousedown/mouseup为ipad工作吗?

我正在使用当前代码:

$('body').mousedown(function() {
        $('div#extras').fadeTo('fast', 1);
});

$('body').mouseup(function() {
        $('div#extras').delay(2000).fadeTo(1500, 0);
});
Run Code Online (Sandbox Code Playgroud)

这在safari中效果很好,但是当我上传并在ipad上查看它时它不起作用?

jquery onmousedown ipad

37
推荐指数
4
解决办法
5万
查看次数

标签 统计

c# ×2

c++ ×2

.net ×1

c ×1

caching ×1

css ×1

delphi ×1

interface ×1

ipad ×1

iunknown ×1

jquery ×1

onmousedown ×1

oop ×1

queryinterface ×1

regex ×1

row ×1

slickgrid ×1

string ×1