小编per*_*age的帖子

是否定义了在COM接口中传递的结构的打包?

我正在使用第三方COM服务器,它有自己的自定义接口,可以设置和获取结构作为它的一些属性.碰巧我正在为客户端使用C++.我在下面的IDL文件中发布了一些代表性代码,更改了名称并删除了GUID.

是否定义了结构的包装或者我的客户端代码是否恰好使用与COM服务器构建的相同打包设置?在默认C++编译器打包设置已更改的项目中是否可能出错?是否有可用于确保客户端编译器打包设置正确的pragma包设置?

我无法在IDL或MIDL生成的头文件中看到任何打包编译指示或语句.如果客户端使用的是C#或VB,会发生什么?如果通过IDispatch机制调用,是否更明确地指定了包装行为?

struct MyStruct
{
    int a, b;
};

[
    object,
    uuid( /* removed */ ),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface IVideoOutputSettings : IDispatch{

    [propget, id(1), HRESULT MyProperty([out, retval] struct MyStruct* pVal);
    [propput, id(1), HRESULT MyProperty([in] struct MyStruct newVal);

    /* other methods */
};
Run Code Online (Sandbox Code Playgroud)

com idl visual-c++

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

如何使 MFC CToolbar 按钮大小对于 Windows 7/10 上的高 DPI 感知应用程序更加一致

我正在使用 CToolbar 开发一个旧的 C++ MFC 应用程序,用于使用 Visual Studio 2017 编译其工具栏。

当应用程序在清单设置(项目/属性/配置属性/清单工具/输入和输出/DPI 感知)中按预期在运行时设置为“高 DPI 感知”时,工具栏似乎随着主监视器 DPI 缩放因子的开启而缩放Windows 10 大约是菜单栏文本的一半高。

在 Windows 7 上,这种缩放似乎不会发生。工具栏在 100% DPI 时与菜单栏文本的高度大致相同,并且在不同的 DPI 设置下保持相同的像素高度。使用或不使用 XP 风格的 DPI 缩放没有区别。

Windows 7 上的底层工具栏公共控件是否根本无法实现高 DPI 缩放?有没有一种有效的方法来调整这一点并使 Windows 7 和 Windows 10 工具栏的大小更加一致?

我可以在运行使用 Visual Studio 2017 的清单中使用高 DPI 感知重新编译的 DOCKTOOL MFC 示例时重现相同的问题。

https://github.com/Microsoft/VCSamples/tree/master/VC2010Samples/MFC/general/docktool

// code excerpts from DOCKTOOL below:
class CMainFrame : public CFrameWnd

{
protected: // create from serialization only
    CMainFrame();
    DECLARE_DYNCREATE(CMainFrame)

    CToolBar    m_wndMainBar;

// Generated message map functions …
Run Code Online (Sandbox Code Playgroud)

c++ mfc highdpi visual-studio

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

标签 统计

c++ ×1

com ×1

highdpi ×1

idl ×1

mfc ×1

visual-c++ ×1

visual-studio ×1