我正在使用第三方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) 我正在使用 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)