zhmeww 发表于 2012-9-2 20:48:31

在并行程序中调用dll库后,内存如何释放?

我windows环境下用CVF6.6编程,我在并行程序中调用dll后(如下)发现内存无法释放,但是在串行程序中却可以释放掉,请高手帮助解决呀,谢谢!
program main
use msfwin
   character *40 dllname, procname
   integer dllhandle,procaddress,nn
   data dllname/'test.dll'c/
   data procname/'xint'c/
#include "mpif.h"

   interface
      subroutine xint(x)
         implicit none
         integer x
      end subroutine xint
   end interface

   pointer (procaddress,xint)
      double precisionmypi, pi, h, sum, x, a
      integer n, myid, numprocs, i, rc

      call MPI_INIT( ierr )
      call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr )
      call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr )
      print *, "Process ", myid, " of ", numprocs, " is alive"

      sizetype   = 1
      sumtype    = 2
      n=30
      
      call MPI_BCAST(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr)


      h = 1.0d0/n

      sum= 0.0d0
      do i = myid+1, n, numprocs
             dllhandle=loadlibrary(dllname)
   if (dllhandle.eq.0) then
      write(*,*)'can nat load dll!'
      stop
endif

procaddress=getprocaddress(dllhandle,procname)
if (procaddress.eq.0) then
   write(*,*)'can not get procedure from dll!'
   stop
endif

call xintout(i)
call FreeLibrary(dllhandle)

enddo
call MPI_REDUCE(mypi,pi,1,MPI_DOUBLE_PRECISION,MPI_SUM,0, MPI_COMM_WORLD,ierr)
call MPI_FINALIZE(rc)

end

[ 本帖最后由 zhmeww 于 2012-9-2 13:49 编辑 ]

zhmeww 发表于 2012-9-2 21:53:41

我自己查了一帮助文件,不知是不是采用dllmain函数就可以解决,但dllmian函数如何应用,帮助文件可没有写,请高手们指点一下。谢谢!
页: [1]
查看完整版本: 在并行程序中调用dll库后,内存如何释放?