我们在制作一个com组件的时候,要么是dll的,要么是exe的。当我CoCreateInstance的时候,注册表里面的信息就已经包含了该com服务器是一个dll文件还是一个exe文件,路径都有了。那么为什么CoCreateInstance的第三个参数仍然可以去指定是进程内的(dll)还是进程外的(exe)?msdn的解释是:dwClsContext 
[in] Context in which the code that manages the newly created object will run. The values are taken from the enumeration CLSCTX.        typedef enum tagCLSCTX {
    CLSCTX_INPROC_SERVER        = 0x1, 
    CLSCTX_INPROC_HANDLER       = 0x2, 
    CLSCTX_LOCAL_SERVER         = 0x4, 
    CLSCTX_INPROC_SERVER16      = 0x8,
    CLSCTX_REMOTE_SERVER        = 0x10,
    CLSCTX_INPROC_HANDLER16     = 0x20,
    CLSCTX_RESERVED1            = 0x40,
    CLSCTX_RESERVED2            = 0x80,
    CLSCTX_RESERVED3            = 0x100,
    CLSCTX_RESERVED4            = 0x200,
    CLSCTX_NO_CODE_DOWNLOAD     = 0x400,
    CLSCTX_RESERVED5            = 0x800,
    CLSCTX_NO_CUSTOM_MARSHAL    = 0x1000,
    CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
    CLSCTX_NO_FAILURE_LOG       = 0x4000,
    CLSCTX_DISABLE_AAA          = 0x8000,
    CLSCTX_ENABLE_AAA           = 0x10000,
    CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
    CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000,
    CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000
} CLSCTX; 问题是加载这个com组件文件的时候系统就已经能知道它是dll还是exe了啊。那这个参数到底什么时候有用呢?

解决方案 »

  1.   

    进程内外,只是靠dll或者exe来确定的吗?
      

  2.   


    我初学,目前是这样理解的。错在哪里呢? dll是要被进程加载的就是进程内? exe因为是另一个进程,所以算是进程外?还请大侠斧正!非常困惑的一个问题。
      

  3.   


    我初学,目前是这样理解的。错在哪里呢? dll是要被进程加载的就是进程内? exe因为是另一个进程,所以算是进程外?还请大侠斧正!非常困惑的一个问题。
    还有DCOM方式,可以去看看