(1)  经常看到进程的句柄复制用到这个函数,不知道用它原因所在。直接用
赋值语句不可以吗?另外,如何在dll中导出类呢(不是函数)?其他vc程序可以来直接调用这个类。不知道这个类可不可以被其他面向对象的语言调用?如java,delphi等

解决方案 »

  1.   

    如hsrcprocesshandle和hdstprocesshandle相同,则代表在同一个进程里面复制对象。
    赋值语句为何不可?是不是类似指针的深拷贝浅拷贝?
      

  2.   

    确保一个被close后,另一个还在
      

  3.   

    duplicatehandle是对于核心对象句柄而言的。当某进程引用一个核心对象的时候,会将该对象映射进自己的进程空间并赋予一个句柄。这个句柄是进程相关的,通常是进程句柄表的索引。每个进程的句柄表各不相同,因而同一个核心对象的句柄值在每个进程中也不同。如果你用同一个值在另一个进程中使用,那这个句柄对应的一般就不是这个对象了,是别的对象或无效句柄。为了保证两个句柄对应的是同一个对象,就要用duplicatehandle.
      

  4.   

    当然,如果源和目的进程是同一个,就都一样了,没必要duplicate
      

  5.   

    不,有必要,比如我们调用GetCurrentThread()时得到的是伪句柄,如果不进行复制,那么直接传到其他线程时它代表的就是其他线程的句柄.
      

  6.   

    1、句柄是进程相关,进程2要使用进程1Create出来的句柄的话,必须先使用duplicatehandle复制出一个句柄,再传进进程2去然后使用。2、如何在dll中导出类呢(不是函数)? -- 请看书吧
    其他vc程序可以来直接调用这个类。--可以
    不知道这个类可不可以被其他面向对象的语言调用?如java,delphi等. -- 不可以
      

  7.   

    to halk:  谢谢你关于进程句柄表的解释,我明白了。不过在同一进程中,也是需要用duplicatehandle。如GetCurrentTread,不用的话,其他线程无法操作它,如不能terminal。
    就如同 weirdy所说。to dancing: 我没用过导出类,不知道哪本书有。谢谢!