小编chr*_*isd的帖子

如何调用指向成员的指针函数?

我收到了一个我不明白的编译错误(MS VS 2008).在弄乱了好几个小时之后,这一切都很模糊,我觉得有一些非常明显(而且非常愚蠢)的东西,我很想念.这是基本代码:

typedef int (C::*PFN)(int);

struct MAP_ENTRY
    {
    int id;
    PFN pfn;
    };

class C
    {
    ...
    int Dispatch(int, int);
    MAP_ENTRY *pMap;
    ...
    };

int C::Dispatch(int id, int val)
    {
    for (MAP_ENTRY *p = pMap; p->id != 0; ++p)
        {
        if (p->id == id)
            return p->pfn(val);  // <--- error here
        }
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

编译器在箭头处声称"术语不评估为采用1参数的函数".为什么不?PFN原型为带有一个参数的函数,MAP_ENTRY.pfn是PFN.我在这里错过了什么?

c++ compiler-errors member-function-pointers

10
推荐指数
2
解决办法
2025
查看次数

原始命令行为typed

我遇到了这样一种情况,即将原始命令行设置为键入,而不是分解为args数组.简单地将args连接成一个字符串会在参数之间丢失额外的空格,在这种特殊情况下它们可能很重要.

原始未解析的命令行是否可用?

.net c# command-line arguments

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

无需结帐即可在存储库中移动SVN项目

假设您有此SVN存储库结构

Root
    Foo
        Project1
        Project2
    Bar
        Project3
Run Code Online (Sandbox Code Playgroud)

并且您希望将Project1移动到顶层:

Root
    Foo
        Project2
    Bar
        Project3
    Project1
Run Code Online (Sandbox Code Playgroud)

开发人员已将Project1置于其本地文件夹树的顶层,因此移动它们没有意义,并且您希望在不要求开发人员执行检查等的情况下完成此操作(这将迫使他们处理大量的无版本的文件).

这可能吗?

我们正在使用Tortoise SVN,但如果需要,我们使用svn.exe没有问题.

TIA

svn move project repository

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

使用IIterable

WinRT API函数DataPackage::SetStorageItems采用类型的参数IIterable<IStorageItem^>^.我所拥有的是一个单一的StorageItem^,而不是一个集合.

我对如何创建一个IIterable集合感到有点困惑,因为我找不到实现该接口的WinRT集合类.我意识到我可以使用IIterable作为基础创建自己的类,但我的猜测是现有的类我没有看到.

我在这里错过了什么?

我想这很明显,但是:C++,VS11,Win8,Metro.

collections microsoft-metro windows-8 windows-runtime c++-cx

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

使用文件 URL 启动 Edge

此问题的答案显示了如何使用 C# 中的 Web URL 启动 Edge:

System.Diagnostics.Process.Start("microsoft-edge:http://www.google.com");

但是,这似乎不适用于文件 URL。

System.Diagnostics.Process.Start("microsoft-edge:file:///C:/foo/bar.html");

启动 Edge,但不显示文件。相反,Edge 会打开其默认页面。将相同的 URL(“file:///C:/foo/bar.html”)粘贴到 Edge 地址栏中工作正常,如果我在资源管理器中右键单击该文件并选择 Open With->Edge,相同的 URL出现在地址栏中。

有谁知道如何使用文件 URL 启动 Edge?

TIA

c# winforms microsoft-edge

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

带有 64 位 Outlook 的 32 位 MAPI 应用程序

我们的应用程序的 32 位版本无法在MAPISendMail安装了 64 位 Outlook 的情况下发送电子邮件。它返回一个错误 0x80004005,除了它似乎是 MAPI 初始化错误之外,我几乎找不到关于它的信息。

根据此 MSDN 文档,这MAPISendMail是 32 位应用程序不能使用 64 位 MAPI 规则的一个例外。然而它不起作用(至少在 XP 和 Vista 中——我们还没有测试过 Win7/8)。

任何人都可以对此有所了解吗?

TIA

windows mapi outlook mapisendmail

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

C++成员函数表

我需要一个将代码映射到C++成员函数的表.假设我们有这个类:

class foo
{
  bool one() const;
  bool two() const;
  bool call(char*) const;
};
Run Code Online (Sandbox Code Playgroud)

我想要的是这样一个表:

{
  { “somestring”,  one },
  { ”otherstring”, two }
};
Run Code Online (Sandbox Code Playgroud)

因此,如果我有一个foo对象f,f.call(”somestring”)将在表中查找"somestring",调用one()成员函数,并返回结果.

所有被调用的函数都有相同的原型,即它们是const,不带参数,返回bool.

这可能吗?怎么样?

c++ arrays member-function-pointers data-structures

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

AlphaBlend 生成不正确的颜色

几十年来我一直设法避免使用 Windows GDI,现在我付出了代价。以下 C++ 代码不会产生正确的颜色。它只是应该对窗口进行白色填充,然后对单个位图进行 alpha 混合。所有 alpha 都是位图中每个像素的 alpha。

// Create a memory DC
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmMem = CreateCompatibleBitmap(hdc, cxWnd, cyWnd);
SelectObject(hdcMem, hbmMem);

// White-fill the BG
FillRect(hdcMem, &rectWnd, static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)));

// Alpha blend the bitmap into the memory DC
HDC hdcSrc = CreateCompatibleDC(hdcMem);
HBITMAP hbmOld = static_cast<HBITMAP>(SelectObject(hdcSrc, hbm));
BLENDFUNCTION bfn = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
AlphaBlend(hdcMem, x, y, cxBmp, cyBmp, hdcSrc, 0, 0, cxBmp, cyBmp, bfn);
SelectObject(hdcSrc, hbmOld);
DeleteDC(hdcSrc);

// Blit the memory DC …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi alphablending bitmap

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