我正在用 C++ 在 Windows COM 中编写一个程序,我正在使用CComPtr
智能指针。
我找不到答案的问题是 - 我可以CComPtr
在std::map
.
我有以下代码片段(简化):
std::map<int, CComPtr<IErrorInfo> > ErrorMap;
Run Code Online (Sandbox Code Playgroud)
我希望保持int
s 和IErrorInfo
错误信息之间的这种映射。
但是,我不确定是否可以执行以下操作:
CComPtr<IErrorInfo> result;
GetErrorInfo(0, &pErrInfo);
ErrorMap.insert(std::make_pair(0, result));
Run Code Online (Sandbox Code Playgroud)
我担心result
智能指针的所有权以及它在ErrorMap
被销毁时是否会正确释放?
假设我有一个像这样的HTML树:
div
`- ul
`- li (*)
`- li (*)
`- li (*)
`- li (*)
`- ul
`- li
`- li
`- li
Run Code Online (Sandbox Code Playgroud)
如何选择<li>
标有的元素(*)
?它们是第一个<ul>
元素的直接后代.
以下是我找到第一个<ul>
元素的方法:
my $ul = $div->look_down(_tag => 'ul');
Run Code Online (Sandbox Code Playgroud)
现在我有了$ul
,但是当我做的事情如下:
my @li_elements = $ul->look_down(_tag => 'li');
Run Code Online (Sandbox Code Playgroud)
它还会找到<li>
隐藏在HTML树中更深层的元素.
我如何找到<li>
第一个<ul>
元素的直接后代的元素?我的数量不详.(我不能只选择前4个例子).
假设我为其中一个进程设置了这个Window层次结构:
Main Window (class name: XYZ_Widget_1)
`- Child Window (class name: XYZ_Widget_0)
`- Child-Child Window (class name: XYZ_Renderer)
Run Code Online (Sandbox Code Playgroud)
我如何找到HWND Child-Child Window
?
我尝试FindWindow
在XYZ_Renderer
类上使用Win32 API函数,但该FindWindow
函数找不到子窗口.
然后我试图使用FindWindow
发现Main Window
,它成功了,但使用后FindWindowEx
只能找到Child Window
作为Child-Child Window
是不是一个孩子Main Window
.
我想我可以更深入一层并在Child Window
找到它之后调用FindWindowEx .
但在我这样做之前,我想可能有一个简单的方法可以找到Child-Child Window
?
我找不到需要在Windows cmd.exe命令行中专门处理的所有符号的列表.
例如,
C:\Users\boda>echo ">"
Run Code Online (Sandbox Code Playgroud)
输出:
">"
Run Code Online (Sandbox Code Playgroud)
但
C:\Users\boda>echo '>'
Run Code Online (Sandbox Code Playgroud)
不输出任何东西.
同样,这些都不起作用:
C:\Users\boda>echo \'>\'
C:\Users\boda>echo \'\>\'
C:\Users\boda>echo '\>'
Run Code Online (Sandbox Code Playgroud)
有与字符类似的问题|
和^
甚至更多.
有谁知道如何在cmd.exe中使用原始字符串?
我应该在我的类中重新定义什么特殊方法,以便它处理AttributeError
异常并在这些情况下返回一个特殊值?
例如,
>>> class MySpecialObject(AttributeErrorHandlingClass):
a = 5
b = 9
pass
>>>
>>> obj = MySpecialObject()
>>>
>>> obj.nonexistent
'special value'
>>> obj.a
5
>>> obj.b
9
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索答案,但找不到。
假设我有一些类C
,我继承它并命名这个类D
.我是否总是必须调用C
默认构造函数,如下例所示:
class C {
public:
C() { ... }
};
class D {
public:
D() : C() { ... }
};
Run Code Online (Sandbox Code Playgroud)
请注意,C
它只有默认构造函数.我必须从D打电话吗?我无法弄清楚如何找到它.
谢谢,Boda Cydo.
任何人都可以解释函数重载是否在C中工作?
我尝试过这个并没有用:
#include <stdio.h>
int f(int val) {
printf("f int\n");
return 5;
}
int f(char *val) {
printf("f char *\n");
return 6;
}
int main() {
f(5);
f("moo");
}
Run Code Online (Sandbox Code Playgroud)
gcc C编译器说:
overload.c:8: error: conflicting types for 'f'
overload.c:3: error: previous definition of 'f' was here
Run Code Online (Sandbox Code Playgroud)
但是,如果我在C++中编译相同的代码,它的工作原理.
有人能解释一下吗?
谢谢,Boda Cydo.
假设我有一个std::vector<Obj *> objs
(出于性能原因,我有指针而不是实际的Obj
s).
我obj.push_back(new Obj(...));
反复填充它.
完成后,我必须delete
使用推回元素.一种方法是这样做:
for (std::vector<Obj *>::iterator it = objs.begin(); it != objs.end(); ++it) {
delete *it;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我可以使用for_each
算法来做同样的事情,我感兴趣:
#include <algorithm>
...
for_each(objs.begin(), objs.end(), delete);
Run Code Online (Sandbox Code Playgroud)
你怎么看?
我正在编写一些COM和ATL代码,并且出于某种原因,所有代码都使用CoTaskMemAlloc
来分配内存而不是new
或malloc
.所以我遵循这种编码风格,我也使用CoTaskMemAlloc
.
我的老师教我永远delete
或free
分配记忆.但是,CoTaskMemFree
如果我使用的话,我不确定是否应该一直打电话CoTaskMemAlloc
?
我使用Data :: Dumper将我的数据序列化为Perl中的字符串.现在在另一个程序中,我试图通过使用来反序列化它,eval
我得到:
Global symbol "$VAR1" requires explicit package name
Run Code Online (Sandbox Code Playgroud)
我use warnings; use strict;
在我的程序中使用.
以下是我eval
的代码:
my $wiki_categories = eval($db_row->{categories});
die $@ if $@;
/* use $wiki_categories */
Run Code Online (Sandbox Code Playgroud)
如何禁止我的程序死亡,因为"$VAR1"
没有被声明为my
?
我应该追加"my "
前$db_row->{categories}
的eval
?像这样:
my $wiki_categories = eval("my ".$db_row->{categories});
Run Code Online (Sandbox Code Playgroud)
我还没有测试过,但我认为它会起作用.
还有其他方法吗?也许将它包装在某个块中,然后对该块关闭严格?我从来没有这样做,但我已经看到它提到了.
任何帮助赞赏!
c++ ×3
atl ×2
com ×2
perl ×2
windows ×2
api ×1
c ×1
cmd ×1
constructor ×1
data-dumper ×1
eval ×1
findwindow ×1
findwindowex ×1
foreach ×1
html ×1
html-tree ×1
memory ×1
overloading ×1
parsing ×1
python ×1
shell ×1
winapi ×1