小编sha*_*oth的帖子

需要ClassInterfaceType.None?

  1. 从MSDN中得不到以下内容:

    ClassInterfaceType.None

    表示没有为类生成类接口.如果没有显式实现接口,则该类只能通过IDispatch 接口提供后期绑定访问.这是推荐的设置ClassInterfaceAttribute.使用ClassInterfaceType.None是通过类显式实现的接口公开功能的唯一方法.

  2. [ComVisible(true)]COM可见性是必须的吗?

.net c# com interop com-interop

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

Visual Studio中的项目依赖项

在Visual Studio中,我有两个C++项目 - Gui.vcproj和Dll.vcproj.

Gui是一个应用程序,Dll生成一个DLL.

什么是自动执行依赖项解析的最佳方法?

我尝试将Dll.vcproj添加到Gui.vcproj的引用中,但它似乎没有用.

c++ visual-studio

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

多个 ProgID 可以指向同一个 ClsID 吗?

我正在研究一组本质上是插件的东西,它们是 COM 服务器。每个插件都有一组由另一个组件管理的配置数据,配置数据的主键是插件的 ProgID。当插件需要访问配置项时,它会进行调用并传入其 ProgID 和所需属性的名称。这是一个遗留设计,我必须保持向后兼容性。

我现在需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个唯一的 ProgID,每个 ProgID 将指向插件的单个 ClsId。因此,插件的每个实例都将通过其 ProgID 进行标识,ProgID 仍用作配置数据的主键,并且所有内容都 100% 向后兼容。

所以,问题:

  1. 这是一种可以接受的技术吗?(多个 ProgID 都指向单个 ClsID)。
  2. 当我的插件加载时,它是否能够分辨出使用哪个 ProgID 来创建它?

windows com ole com-interop progid

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

如果一次实现多个COM接口,我如何向IUnknown转发?

假设我的COM对象实现了两个或更多COM接口:

class CMyClass : public IPersistFile, public IPersistStream {
};
Run Code Online (Sandbox Code Playgroud)

在实现QueryInterface()时,我需要能够返回一个IUnknown*指针.由于两个基接口都是从IUnknown派生出来的,所以我无法隐式转发 - 这种向上转换是不明确的.要明确地向上转换,我需要使用以下两种方法之一:

 if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast<IPersistFile*>( this );
     static_cast<IPersistFile*>( this )->AddRef();
     return S_OK;
 }
Run Code Online (Sandbox Code Playgroud)

要么

 if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast<IPersistStream*>( this );
     static_cast<IPersistStream*>( this )->AddRef();
     return S_OK;
 }
Run Code Online (Sandbox Code Playgroud)

看起来唯一的要求是,每当在一个对象上调用QI()时,它每次返回相同的指针,如果我选择任何一个强制转换并且坚持它,我就满足了这个要求.

我应该选择哪种上传?为什么?

c++ windows com visual-c++

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

可以使用0L初始化C++中的指针导致问题吗?

这个问题中,初始化器用于将指针设置为null.而不是使用值的00L.我已经读过,应该完全0使用空指针,因为精确的空指针表示是特定于实现的.

可以使用0L设置指针为null导致移植时出现问题吗?

c++ pointers null-pointer

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

在引用上使用"operator&"是一个可移植的C++构造吗?

假设我有:

void function1( Type* object ); //whatever implementation
void function2( Type& object )
{
    function1( &object );
}
Run Code Online (Sandbox Code Playgroud)

假设Type没有重载,operator &()这个构造 - operator &在引用上使用 - Type在所有符合标准的C++编译器上获取对象的实际地址(类型的变量)?

c++ pointers reference

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

SVN changelog中的作者姓名是否可靠用于跟踪作者身份?

在多用户环境中,了解SVN存储库中每个变更集的真实作者有时非常有用.

我看到Tortoise SVN中有"编辑作者".这是否意味着任何人都可以做任何事情,然后只更改该变更集上的作者姓名,以便将更改归因于另一个用户?

是否可以识别真正的变更作者?

svn version-control tortoisesvn

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

为什么当我转换为"long"时会调用"operator bool()"?

我有以下课程:

class MyClass {
public:
   MyClass( char* what ) : controlled( what ) {}
   ~MyClass() { delete[] controlled; }
   operator char*() const { return controlled; }
   operator void*() const { return controlled; }
   operator bool() const { return controlled != 0; }

private:
   char* controlled;
};
Run Code Online (Sandbox Code Playgroud)

这是使用具有以下typedef的Microsoft SDK编译的:

typedef long LONG_PTR;
typedef LONG_PTR LPARAM;
Run Code Online (Sandbox Code Playgroud)

调用代码执行以下操作:

MyClass instance( new char[1000] );
LPARAM castResult = (LPARAM)instance;
// Then we send message intending to pass the address of the buffer inside MyClass
::SendMessage( …
Run Code Online (Sandbox Code Playgroud)

c++ casting operators visual-c++

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

如何在Visual C++ 9中调试缓冲区溢出?

我有一个用Visual C++ 9编写的巨大的MMC管理单元.每当我在MMC中遇到F5时,mmc.exe崩溃了.如果我附加调试器,我会看到以下消息:

mmc.exe中发生缓冲区溢出,破坏了程序的内部状态.按Break可调试程序或继续终止程序.

有关更多详细信息,请参阅帮助主题"如何调试缓冲区溢出问题".

首先,没有如何调试缓冲区溢出问题任何地方主题.

当我检查调用堆栈时,我发现可能有一些安全cookie用于防止堆栈分配的缓冲区溢出:

MySnapin.dll!__crt_debugger_hook()  Unknown
MySnapin.dll!__report_gsfailure()  Line 315 + 0x7 bytes C
mssvcr90d.dll!ValidateLocalCookies(void (unsigned int)* CookieCheckFunction=0x1014e2e3, _EH4_SCOPETABLE * ScopeTable=0x10493e48, char * FramePointer=0x0007ebf8)  + 0x57 bytes  C
msvcr90d.dll!_except_handler4_common(unsigned int * CookiePointer=0x104bdcc8, void (unsigned int)* CookieCheckFunction=0x1014e2e3, _EXCEPTION_RECORD * ExceptionRecord=0x0007e764, _EXCEPTION_REGISTRATION_RECORD * EstablisherFrame=0x0007ebe8, _CONTEXT * ContextRecord=0x0007e780, void * DispatcherContext=0x0007e738)  + 0x44 bytes    C
MySnapin.dll!_except_handler4(_EXCEPTION_RECORD * ExceptionRecord=0x0007e764, _EXCEPTION_REGISTRATION_RECORD * EstablisherFrame=0x0007ebe8, _CONTEXT * ContextRecord=0x0007e780, void * DispatcherContext=0x0007e738)  + 0x24 bytes C
ntdll.dll!7c9032a8()    
[Frames below may be incorrect and/or missing, …
Run Code Online (Sandbox Code Playgroud)

c++ debugging visual-studio-2008 visual-c++

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

对于具有运算符new重载的类,我可以使用全局运算符new吗?

假设我有一个超载的类operator new.

class Class {
public:
   void* operator new( size_t );
   void operator delete( void* );
};
Run Code Online (Sandbox Code Playgroud)

operator new当我使用时,该类的对象是否总是与重载一起分配,new Class()或者operator newnew Class()构造出现在代码中时是否可能使用默认值?

c++ memory-management operator-overloading

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