小编Rob*_*Rob的帖子

IDL枚举未显示在类型库中

我有一个使用MS ATL库编写的COM对象.我在IDL中声明了一堆枚举,但在使用MS COM对象查看器工具查看类型库时它们不会出现.问题似乎是缺少的枚举实际上并没有被任何COM方法用作参数 - 我如何强制这些枚举出现?

例如,在IDL中:

// Used by Foo method, so appears in the type library
typedef enum FOO
{
    FOO_1,
    FOO_2,
} FOO;

// Not used by any method, so won't appear in the type library
typedef enum BAR
{
    BAR_1,
    BAR_2,
} BAR;

[id(1)] HRESULT Foo([in] FOO eFoo);
Run Code Online (Sandbox Code Playgroud)

即使所讨论的枚举没有被任何方法直接使用,它们对使用该对象的任何人仍然有用,但我不能让它们导出.

谁看过这个吗?

com idl

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

boost :: shared_ptr标准容器

假设我有一个类foo,并希望使用std :: map存储一些boost :: shared_ptrs,例如:

class foo;

typedef boost::shared_ptr<foo> foo_sp;
typeded std::map<int, foo_sp> foo_sp_map;

foo_sp_map m;
Run Code Online (Sandbox Code Playgroud)

如果我向地图添加新的foo_sp但已使用的密钥已存在,是否会删除现有条目?例如:

foo_sp_map m;

void func1()
{
    foo_sp p(new foo);
    m[0] = p;
}

void func2()
{
    foo_sp p2(new foo);
    m[0] = p2;
}
Run Code Online (Sandbox Code Playgroud)

当原始指针(p)被p2替换时,它是否会被释放?我很确定它会,但我认为值得询问/分享.

c++ smart-pointers stdmap std

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

为什么线程函数需要声明为'__cdecl'?

显示如何使用MFC创建线程的示例代码将线程函数声明为静态和__cdecl.为什么需要后者?提升线程不打扰这个惯例,所以它只是一个时代错误吗?

例如(MFC):

static __cdecl UINT MyFunc(LPVOID pParam)
{
...
}

CWinThread* pThread = AfxBeginThread(MyFunc, ...);
Run Code Online (Sandbox Code Playgroud)

而提升:

static void func()
{
...
}

boost::thread t;
t.create(&func);
Run Code Online (Sandbox Code Playgroud)

(代码示例可能不是100%正确,因为我不在IDE附近).

__cdecl有什么意义?它在创建线程时有何帮助?

c++ mfc multithreading boost

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

Subversion外部问题

我是SVN的新手并且大量使用外部属性.我的PC上有一个存储库,外部属性在名称中有一个硬编码的"localhost",现在给我带来了问题.例如:

/project1/trunk
/shared/trunk
Run Code Online (Sandbox Code Playgroud)

project1/trunk取决于共享文件夹,因此具有svn:// localhost/shared/trunksvn:externals属性.这与TortoiseSVN一起工作正常,我可以结帐并给我一份副本.project1/trunkshared/trunk

现在我已经将存储库移动到另一个服务器,并且由于显而易见的原因,外部链接不再起作用(TortoiseSVN正在尝试检出svn://localhost/shared/trunk哪些不再存在).

所以我需要更新我的所有外部 - 但我不想硬编码任何机器名称 - 所以我该如何使这项工作?请记住,存储库可能会在某个时刻再次移动.围绕SVN手册,我遇到了^ /语法,所以我尝试了以下内容:

svn:externals shared ^/shared/trunk
Run Code Online (Sandbox Code Playgroud)

这被接受但是当我尝试project1在我的电脑上签出一份副本时,我收到以下错误:

Unrecognized format for the relative external URL 'shared'.
Check the path and/or URL you've entered.
Run Code Online (Sandbox Code Playgroud)

除非我在外部硬编码存储库机器名称,否则我无法使其工作 - 这似乎是一种黑色艺术,所以任何建议都会受到欢迎.

svn externals

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

使用COM传递数组?

我是一个用ATL编写的COM对象,它是从C++应用程序中使用的,我想在两者之间传递一组BYTE.到目前为止,我对COM/IDL的体验仅限于传递简单类型(BSTR,LONG等).

是否有一种相对简单的方法让COM对象将数组传递给调用者?例如,我想传递原始图像(TIFF)而不是弄乱临时文件.

c++ com

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

您是否在每个.hpp/.cpp文件的顶部添加信息?

在创建新的C++标头/源文件时,您将哪些信息添加到顶部?例如,您是否添加了日期,您的姓名,文件说明等?您是否使用结构化格式来获取此信息?

例如

// Foo.cpp - Implementation of the Foo class
// Date: 2008-25-11
// Created by: John Smith
Run Code Online (Sandbox Code Playgroud)

我认识的一个团队将CVS提交消息嵌入到每个文件的脚下,但我不确定我是否想要走这么远......

c++ coding-style

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

颠覆分支问题

我已经检查了我的应用程序的特定Subversion分支.称之为'1.0'.我一直在做一些更改,添加一些新文件等,但还没有提交更改.但是,我不想将更改提交到"1.0"分支.相反,我想将我的更改提交到新的"1.1"分支.

据我所知,我需要首先查看"1.0"分支的新副本,然后创建一个名为"1.1"的新Subversion分支,然后在提交之前手动复制我的待处理更改.

有更简单的方法吗?

svn branch

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

Magic COLORREF/RGB值确定何时使用浅色/深色文本

几年前,在我久违的查尔斯Petzold的Windows 3.0的编程书的副本,有一个神奇的COLORREF或RGB值记录,你可以用它来检查你是否应该以浅色或深色绘制文本.例如,如果背景颜色低于此值,则使用黑色文本,如果更高,则使用白色文本.有谁知道/记住这个神奇的价值是什么?

c c++ windows rgb

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

初始化结构中的第一个元素

我在C++中做了很多Win32编程,许多Win32结构都有一个'size'(通常称为cbSizeor length)成员作为第一个需要在进行相关API调用之前设置的元素.例如:

WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd, &wp);
Run Code Online (Sandbox Code Playgroud)

现在,我认为将结构成员初始化为零是一个好习惯,我可以这样做:

WINDOWPLACEMENT wp = { };
Run Code Online (Sandbox Code Playgroud)

要么

WINDOWPLACEMENT wp = { 0 };
Run Code Online (Sandbox Code Playgroud)

但是,如果我像这样初始化第一个成员,那么结构的其他成员会发生什么:

WINDOWPLACEMENT wp = { sizeof(WINDOWPLACEMENT) };
Run Code Online (Sandbox Code Playgroud)

它们是否自动初始化为零?或者它取决于我正在使用哪个编译器以及它是否是调试版本?

c++

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

使用 MinGW 进行 Windows DDK 开发?

是否可以在不使用 Visual Studio 的情况下开发 Windows 驱动程序(特别是类似 PDF 的打印机驱动程序,在屏幕上显示数据而不是实际打印)?我正在考虑使用免费的 C++ 工具,例如 MinGW/gcc。

c++ mingw wdk

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

标签 统计

c++ ×7

com ×2

svn ×2

boost ×1

branch ×1

c ×1

coding-style ×1

externals ×1

idl ×1

mfc ×1

mingw ×1

multithreading ×1

rgb ×1

smart-pointers ×1

std ×1

stdmap ×1

wdk ×1

windows ×1