草庐IT

c++ - 如何将 ATL/MFC CString 转换为 QString?

鉴于项目的编码可能是Unicode(但不确定)将ATL::CString转换为QString的最佳方法是什么?我想到的是这样的:CStringc(_T("SOME_TEXT"));//...std::basic_stringintermediate((LPCTSTR)c);QStringq;#ifdef_UNICODEq=QString::fromStdWString(intermediate);#elseq=QString::fromStdString(intermediate);#endif你觉得有用吗?还有其他想法吗? 最佳答案

c++ - ATL COM 类注册 .rgs 文件默认值

我正在创建COM服务器可执行文件,但遇到了类注册问题。当我创建类对象时,自动生成的.rgs文件如下所示:HKCR{NoRemoveCLSID{ForceRemove{4C6DAD45-64B4-4C55-81C6-4CE125226421}=s'TestClass'{ForceRemoveProgrammableLocalServer32=s'%MODULE%'{valServerExecutable=s'%MODULE_RAW%'}TypeLib=s'{EAA173CA-BDBC-463A-8B7A-B010EFA467BC}'Version=s'1.0'}}}这为CLSID正确创建

c++ - 仅使用 Windows SDK 7.1 编译 ATL 项目

我有一个项目需要编译。它是在我们的构建服务器上编译的,我只在上面安装了WindowsSDK7.1。我不想在这台机器上安装实际的VisualStudio,但收到错误“找不到atlstr.h”文件,我刚刚阅读的是ATL的一部分,它是VisualStudio的一部分。有什么方法可以让我在不在构建服务器上安装VisualStudio的情况下进行编译? 最佳答案 ATL现在作为Windows驱动程序工具包的一部分免费提供:http://msdn.microsoft.com/en-us/windows/hardware/gg487438.asp

c++ - 使用 ATL 枚举 COM 对象 (IDispatch) 方法?

如何使用ATL(VS2008)枚举给定IDispatch接口(interface)(IDispatch*)上可用的可用方法?我需要搜索具有特定名称的方法,一旦我有了DISPID,调用该方法(我知道该方法采用的参数。)理想情况下,我想使用智能COM指针(CComPtr)来执行此操作。这可能吗? 最佳答案 您可以枚举IDispatch通过类型信息公开的方法。有两种获取类型信息的方式:通过调度接口(interface)的类型库(如果有的话)。通过调用IDispatch::GetTypeInfo.不幸的是,IDispatch实现没有义务提供

c++ - 如何从基类派生 ATL COM 类?

“ATL简单对象”向导不提供指定新类派生自现有组件类及其接口(interface)的方法。在VisualStudio2008中,我如何创建一个从现有类派生的新ATLCOM类(即Base实现IBase,我想创建一个新的Derived派生自实现IDerived的Base的类,其中IDerived派生自IBase。)更新:听起来很简单,但是一个向导生成的ATL类最多有六个基类,一个COM映射和一个连接点映射。这些基类和映射中的哪些应该在派生类中重复?如果在派生类中重复映射,它们应该包含基类映射的内容还是仅包含附加项?基类的顺序重要吗?FinalConstruct()和FinalRelease

c++ - 不使用 ATL 实现 COM IDispatch

我正在编写一个ExcelRTD服务器实现,我被困在一个实现IDispatch的组件类的样板中。我无权访问ATL,但我正在使用ActiveQt,尽管我也对如何在原始C或C++中执行此操作很感兴趣。如何在COM服务器中正确实现IDispatch方法?一如既往,文档非常糟糕。到目前为止我读过的内容:更好的做法是delegatetheIDispatchmethodcallstosomeITypeInfo.这是正确的吗?如果是这样,如何为自己获取一个ITypeInfo?LoadTypeLib()和家庭(然后查看ITypeLib::GetTypeInfo())?如果没有,它是如何正确实现的?高质量

c++ - ATL 库 :warning LNK4254 and LNK4078

我正在Windows7下使用VisualC++2010制作一个项目。我需要使用ATL库,实际上我安装了WindowsWDK(版本7600.16385.1)特别是我使用WDK中的以下库setupapi.libatls.libatlsd.libatl.libatlthunk.lib编译我的代码时出现以下警告:atls.lib(stdafx.obj):警告LNK4254:“ATL”部分(50000040)合并到具有不同属性的“.rdata”(40000040)atls.lib(stdafx.obj):警告LNK4078:发现具有不同属性的多个“ATL”部分(40301040)有人知道怎么解决

c++ - ATL 和 WTL 有什么区别?

我知道“WTL建立在ATL”,但这在实际中意味着什么?就功能而言,ATL是WTL的子集吗?(即ATL中的所有功能是否也存在于WTL中?)我注意到维基百科指出ATL的开发状态是“当前”,而WTL的最新版本是从2009年年中开始的。这是否意味着如果我想使用Glass/Aero和其他Windows7功能编写Windows7软件,那么我不能使用WTL来完成?ATL呢?用ATL和WTL编写程序在性能/内存方面有什么不同吗? 最佳答案 ATL是主要实现COM基础的MicrosoftC++库。它的一部分还针对ActiveX控件(这绝对不是整个库的

c++ - 生成导出包含 ATL::CString 成员的类的 DLL 时出现警告 C4251

我正在将基于ATL的静态库转换为DLL,并且在任何使用ATLCString类(在atlstr.h中找到)的导出类上都收到以下警告:warningC4251:'Foo::str_':class'ATL::CStringT'needstohavedll-interfacetobeusedbyclientsofclass'Foo'我正确地将Foo类声明为通过__declspec(dllexport)导出。这是我可以安全忽略的警告还是我做错了什么?DLL项目设置设置为与ATL动态链接,但这似乎没有任何区别。例如:#ifdefDLLTEST_EXPORTS#defineDLLTEST_API__

c++ - 静态或动态链接 CRT、MFC、ATL 等

早在90年代,当我第一次开始使用MFC时,我曾经动态链接我的应用程序并发布相关的MFCDLL。这给我带来了一些问题(DLLhell!),我改用静态链接-不仅适用于MFC,还适用于CRT和ATL。除了更大的EXE文件之外,静态链接从来没有给我带来任何问题——那么其他人遇到过任何缺点吗?是否有充分的理由再次访问动态链接?我的应用现在主要是STL/BoostFWIW。 最佳答案 我听到的大多数答案都涉及与其他程序共享您的dll,或者在无需修补软件的情况下更新这些dll。坦率地说,我认为这些是缺点,而不是优点。当第三方dll更新时,它的变化