小编fra*_*ast的帖子

Vista和ProgramData

存储程序数据文件的正确位置是什么,这些文件对于每个用户都是相同的但是必须可以为程序写入?MS Windows XP上的等效位置是什么?我已经读过普通用户安装后C:\ ProgramData不可写.真的吗?如何使用Platform SDK以编程方式检索该目录?

directory shared programdata windows-vista

15
推荐指数
2
解决办法
9807
查看次数

如何将/ baseaddress设置为"良好"值?

我们有一个包含许多dll文件的项目,这些文件在应用程序启动时会被加载.dll文件的baseaddresses确实重叠,以便重新定位内存映像.是否有可能自动分配baseaddresses或计算每个dll文件的"好"基址?

c++ dll native

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

如何改进COM接口?

众所周知,COM在发布新组件或应用程序时可以实现向后兼容性.这是可能的,因为COM中的接口是稳定的,即它们不会改变.

我努力寻找一个参考或书籍来处理如何从版本到版本躲避COM接口的描述.

以下是我的要求:

我们有一个可以由ole自动化驱动的应用程序.此应用程序的新版本可以与旧版本并行安装.

此应用程序的COM客户端可以使用独立于版本的PROGID,在这种情况下,它们可以使用最新版本的应用程序或依赖于版本的PROGID,在这种情况下,它们可以使用特定版本的应用程序.

对COM自动化的更改不应该破坏任何客户端.

让我们看一个例子:

#include <olectl.h>
#include <fxbase\autoif.h>

[
    uuid(A1B3A66F-806F-46a2-82D9-9C278F415148),
    lcid(-1),
    version(1.0)
]

library LIB
{   
        importlib("stdole2.tlb");

        [
            uuid(82CDE055-790A-4505-BF3E-3282170C8FC6),
            helpstring("Document"),
            oleautomation,
            dual,
            nonextensible
        ]
        interface IDocument : IDispatch
        {
                [id(0x00000001), propget, helpcontext(0x0012c94a)]
                HRESULT Name([out, retval] BSTR* psName);

                [id(0x00000001), propput, helpcontext(0x0012c94a)]
                HRESULT Name([in] BSTR psName);
        }

        [
            uuid(919B9E6E-76C0-4c23-A188-5840E5900997),
            helpstring("Application object."),
            oleautomation,
            dual,
            nonextensible
        ]
        interface IApplication : IDispatch
        {
            [id(0x00000001), propget, helpstring("Returns the active document of the application.")]
            HRESULT ActiveDocument([out, retval] IDocument** retval);
        }

        [
            uuid(E0AA6FCA-AEF1-460b-A1F9-26250C28594B),
            helpstring("Application 1.0 …
Run Code Online (Sandbox Code Playgroud)

com winapi ole

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

像LINQ to Entities中的运算符或使用通配符一样

我正在使用LINQ 2实体.以下是问题:

string str = '%test%.doc%' 
.Contains(str) // converts this into LIKE '%~%test~%.doc~%%'
Run Code Online (Sandbox Code Playgroud)

预期转换:LIKE'%test%.doc%'

如果它是LINQ 2 SQL,我可以使用SqlMethods.Like,因为有人在我之前的问题中回答了它.但是现在因为我使用L2E而不是L2S,我需要其他解决方案.

c# linq linq-to-entities

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

std :: function在堆栈中的数组中使用时崩溃

在MS Visual C++ 2010 SP1中,此代码崩溃:

#include "stdafx.h"

#include <functional>
#include <iostream>
//#include <vector>

int a = 0;

int _tmain(int argc, _TCHAR* argv[]) {
    // this way it works:
    //std::vector<std::function<void ()>> s;
    //s.push_back([]() { a = 1; });
    //s.push_back([]() { a = 2; int b = a; });

    std::function<void ()> s[] = { 
        []() { a = 1; },
        []() {
            a = 2;

            // Problem occurs only if the following line is included. When commented out no problem occurs.
            int …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010 visual-c++ c++11

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

用C++进行单元测试

是否可以使用接口来破坏所有依赖项以使类可测试?由于许多虚拟调用而不是普通的方法调用,它在运行时会产生很大的开销.

测试驱动的开发如何在现实世界的C++应用程序中运行?我读过有效使用遗留代码并且非常有用,但是没有加快练习TDD的速度.

如果我进行重构,它经常发生,因为大量的逻辑变化,我必须完全重新进行单元测试.我的代码更改经常改变数据处理的基本逻辑.我没有看到编写单元测试的方法,这些测试不需要在大型重构中进行更改.

可能有人可以指向我使用TDD通过示例学习的开源c ++应用程序.

c++ refactoring unit-testing

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

在WPF应用程序中托管win32窗口?

我有一个遗留的c ++ win32应用程序,并使用wpf windows扩展它确实有效.

但我想要做的是将WPF窗口作为主窗口,而不仅仅是任何旧窗口而是棱镜外壳窗口.

所以对于我的遗留c ++项目,我想添加一个Bootstrapper,shell窗口,MEF加载器,所有的铃声和​​口哨声.在那里,我想放置一些命令,在需要时打开传统的win32窗口.

现在在win32应用程序中打开WPF窗口很简单,我只需要使用

System::Windows::Forms::Integration::ElementHost::EnableModelessKeyboardInterop(mywindow);
Run Code Online (Sandbox Code Playgroud)

但是如何在WPF应用程序中打开win32窗口?win32窗口需要一个消息泵循环,但我在哪里放这个:

MSG  msg;
while (GetMessage(&msg, NULL, NULL, NULL))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}
Run Code Online (Sandbox Code Playgroud)

我可以为循环创建任何新线程吗?或者是否也有这样的互操作助手?

或者我的想法是疯了吗?

c++ wpf winapi interop

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

可以通过引用返回临时对象

是否可以从此示例代码中的函数返回引用:

string &erase_whitespace(string &text)
{
    text.erase(**etc.**);
    return text;
}
Run Code Online (Sandbox Code Playgroud)

呼叫:

string text = erase_whitespace(string("this is a test"));
cout << test;
Run Code Online (Sandbox Code Playgroud)

这段代码有用吗?在Visual C++上,它不会崩溃但看起来不对.

谢谢

c++

3
推荐指数
2
解决办法
1089
查看次数