进程间是怎样共享数据的?
dll的异常和safecall的问题?

解决方案 »

  1.   

    1)一般使用共享内存文件实现
    2)SafeCall用于Interface的,对于普通DLL的,是不需要使用的,具体看Help的_____________________
    http://lysoft.7u7.net
      

  2.   

    DLL异常跟普通EXE进程的异常不差什么呀。
      

  3.   

    一.1 6位的Windows与32位的Win32处理DLL内存的方式是不同的。在16位的Window s中,显然,不同的应用程序可以共享1 6位D L L的全局数据。也就是说,如果DLL定义了一个全局变量,所有调用这个D L L的应用程序都可以访问这个变量,而其中的一个应用程序对变量的修改,将会影响其他应用程序。而Win32就不再共享DLL的全局变量。因为每个应用程序都是将DLL映射到自己的地址空间,同时DLL的数据也就随之被映射。这样,每个应用程序都有自己DLL数据实例,在一个应用程序中修改DLL中的全局变量,就不会影响其他应用程序。如果想把一个16位的应用程序移植到3 2位的Win32下,而仍然以16位的共享方式来共享全局变量,这就要求以一种内存映射文件的技术来实现
      

  4.   

    Safecall指示符用于COM和异常处理。如果函数用Safecall声明,就可确保任何异常都被传播给函数的调用者,并且将异常转换为HResul t类型的返回值。S a f e c a l l也意味着采用S t d C a l l调用约定。因此,Safecall函数声明如下:function FOO(i:integer):String ;safecall
    编译器是这样看这行代码的:function Foo(i:integer):String;HResult;safecall然后编译器就会给整个函数内容加上try. . except外套,并且捕获触发的任何异常。e x c e p t块调用Safecall Exception Handler ( ),将异常转换为HResult类型值。这个类似于16位的捕捉异常并返回错误值的方法。
    不知道理解到你的意思没