小编Tom*_*ams的帖子

在for构造中使用size()表示第二个表达式总是坏的吗?

在下面的例子中我应该期望values.size()每次循环都会调用它吗?在这种情况下,引入临时vectorSize变量可能是有意义的.或者现代编译器是否能够通过识别向量大小无法改变来优化调用.

double sumVector(const std::vector<double>& values) {
    double sum = 0.0;
    for (size_t ii = 0; ii < values.size(); ++ii) {
        sum += values.at(ii);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我不关心是否有更有效的方法来对向量的内容求和,这个问题只是在for构造中使用size().

c++

8
推荐指数
4
解决办法
592
查看次数

如何确保无法重新访问我的主STA COM服务器(C++)?

好吧,我怀疑即使把这个用在文字中,我也会遇到困难,因为我对COM和公寓的理解并不是真的可以胜任工作;-)

我有一个COM进程内服务器/组件(C++),它包含一些遗留代码.由于此遗留代码的限制,我需要确保COM组件的方法是:

  1. 只调用单个线程.
  2. 这对于服务器的所有实例始终是相同的线程.
  3. (我后来才意识到)没有可重入的电话.

我通过使用ThreadingModel =""注册服务器来实现的前两个.

第三个是我甚至遇到的一个问题.

服务器正由多线程客户端使用,我无法控制.它在不同的线程上创建服务器/组件的多个实例并调用它们的DoSomething()方法.

这导致选择挂起和崩溃行为,我看到堆栈跟踪在主STA线程上包含对DoSomething()的两次调用,但是对于服务器的不同实例.

我最初甚至不认为这是可能的,但我现在有一个部分理解,我需要知道是否/如何防止它.

我的阅读建议我可能需要以某种方式使用IMessageFilter,但我不确定这是否可以在服务器端完成,或者需要由客户端完成.

有人可以帮忙吗?

请注意我希望看到COM级别是否有任何答案,而不是寻找有关更改服务器代码与遗留代码交互方式的建议(例如,通过在自己的线程中运行遗留代码并实现我自己的代码) (非COM)将来自服务器的所有实例的调用编组到该线程上).

c++ com winapi

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

WinXP 的“发送到压缩(zipped)文件夹”如何决定要包含在 zip 文件中的内容?

如果我因为问“非编程”问题而被拒绝,我不会太惊讶,但也许有人知道......

我正在使用 WinXP 的内置“发送到压缩(zipped)文件夹”功能压缩我的 subversion 沙箱的内容,并惊讶地发现创建的 .zip 文件不包含 .svn 目录及其内容。

我一直假设所有文件都包含在内,我无法找到哪个属性/选项/属性控制包含或其他。有人可以帮忙吗?

谢谢,汤姆

编辑:

那么,难道没有一个聪明的方法来处理这个问题吗?真正的问题(显示隐藏文件设置为 true。.svn 文件夹没有被压缩,因为 windows 不认为它们是有效的文件夹)仍然没有答案。

谢谢...

zip windows-xp

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

是否有可能有一个进程外COM服务器,其中每个对象实例使用单独的操作系统进程?

我有一个传统的C++,我已经由仅需要一个客户端应用程序包装成用于一个进程COM对象"溶液引擎" 单个 "溶液引擎".

但是我现在有一个需要多个"解决方案引擎"的客户端应用程序.遗憾的是,底层遗留代码具有足够的全局数据,单例和线程恐怖,在给定可用资源的情况下,不可能同时在其中处理多个实例.

我希望是某种善良的灵魂可以告诉我一些COM魔术在哪里通过几个注册表设置的翻转,可以为每个实例提供一个单独的进程外COM服务器(单独的操作系统进程)请求的COM对象.

我好运吗?

c++ com winapi

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

进程外COM对象是否可以确定其父进程?

从进程外COM对象(LocalServer32),我可以确定请求创建对象的客户端进程吗? - 具体来说,我需要掌握客户端进程命令行.

这个问题的原因在于(由于标准化,实现和支持不佳),对象的潜在第三方客户端具有对象需要解决的各种特性.

为此,对象需要能够识别其当前客户端.

遗憾的是,扩展COM对象的接口以便客户端可以识别自身......或者更准确地说,接口可以扩展,但是我无法让客户端调用扩展.

c++ com winapi

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

是否可以确定另一个进程的工作目录?

给定处理“A”的句柄(或 ProcessID),​​在 Win32 上,不相关的进程“B”是否可以确定进程“A”的当前工作目录?

winapi

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

谁能解释为什么我的加密++解密文件短16个字节?

为了能够将AES加密文本作为std::istream解析器组件提供给我,我试图创建一个std::streambuf包含vanilla crypto ++加密/解密的实现.

main()函数调用以下函数来比较我的包装器和vanilla实现:

  • EncryptFile() - 使用我的streambuf实现加密文件
  • DecryptFile() - 使用我的streambuf实现解密文件
  • EncryptFileVanilla() - 使用vanilla crypto ++加密文件
  • DecryptFileVanilla() - 使用vanilla crypto ++解密文件

问题是虽然加密文件由EncryptFile()和创建的EncryptFileVanilla()相同.创建的解密文件DecryptFile()不正确,比由创建的文件短16个字节DecryptFileVanilla().可能并非巧合的是,块大小也是16.

我认为问题必须在CryptStreamBuffer::GetNextChar(),但我一直在盯着它和加密++文档几个小时.

有人可以帮忙/解释一下吗?

任何其他关于我的std::streambuf实施如何蹩脚或天真的评论也欢迎;-)

谢谢,

汤姆

// Runtime Includes
#include <iostream>

// Crypto++ Includes
#include "aes.h"
#include "modes.h"      // xxx_Mode< >
#include "filters.h"    // StringSource and
                        // StreamTransformation
#include "files.h"

using namespace std;

class CryptStreamBuffer: public std::streambuf {

public:

    CryptStreamBuffer(istream& encryptedInput, CryptoPP::StreamTransformation& …
Run Code Online (Sandbox Code Playgroud)

c++ encryption crypto++

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

为什么这个C++类不等同于这个模板?

有人可以向我解释为什么以下工作:

template<class T> class MyTemplateClass {
public:
    T * ptr;
};

int main(int argc, char** argv) {
    MyTemplateClass<double[5]> a;
    a.ptr = new double[10][5];
    a.ptr[2][3] = 7;
    printf("%g\n", a.ptr[2][3]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

class MyClass {
public:
    double[5] * ptr;
    // double(*ptr)[5]; // This would work
};

int main(int argc, char** argv) {
    MyClass a;
    a.ptr = new double[10][5];
    a.ptr[2][3] = 7;
    printf("%g\n", a.ptr[2][3]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显然,模板实例化不仅仅是模板参数的文本替换 - 这个魔术有一个简单的解释吗?

对于后者,编译器(g ++ 4.1.2)会吐出以下错误:

test.cxx:13: error: expected unqualified-id before '[' token
Run Code Online (Sandbox Code Playgroud)

第13行是该 …

c++ templates

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

标签 统计

c++ ×6

winapi ×4

com ×3

crypto++ ×1

encryption ×1

templates ×1

windows-xp ×1

zip ×1