Copies native memory to managed memory allocated by third-party APIs, such as the Windows FormatMessage API. You cannot address
                  managed memory except with this JVM_UNSAFE_NATIVE_MEMCOPY library routine. 
                  	  
               
            
 
            	 
            
               		
               Warning:  When using this library routine, take great care to pass valid parameters. An invalid parameter can cause instability in
                  your environment.
                  		
               
               	 
             
            	 
            
               Syntax:
 
               		 
               		call “JVM_UNSAFE_NATIVE_MEMCOPY” using
   by value nativePointer
   by value memoryLength
   by value managedPointer
   returning status-code
end-call
 
               	   
            	 
            
               Parameters:
 
               		 
               		
                
                  		   
                  			 
                  -  
                     				nativePointer 
                     			 
                  
- A native-pointer. 
                     			 
                  
- memoryLength 
                     			 
                  
- The length expressed as PIC S9(9) COMP-5. 
                     			 
                  
- managedPointer 
                     			 
                  
- A pointer where 
                     				native-pointer is the user typedef: 
                     				$IF JVM32 DEFINED  
01 native-pointer is typedef pic x(4) comp-5.
$ELSE
01 native-pointer is typedef pic x(8) comp-5.
$END  
                        				
                      
- status-code 
                     			 
                  
- The returned status code. 
                     			 
                  
  
            	 
            
               On Entry:
 
               		 
               		
                
                  		   
                  			 
                  - nativePointer 
                     			 
                  
- The address if the native memory. 
                     			 
                  
- memoryLength 
                     			 
                  
-  The length of the native memory block. 
                     			 
                  
- managedPointer 
                     			 
                  
- The address of the managed memory block. 
                     			 
                  
  
            	 
            
               On Exit:
 
               		 
               		
                
                  		   
                  			 
                  - status-code 
                     			 
                  
-  
                     				
                     
                         
                           					 
                            
                              						
                               
                                 						  
                                 | 0 | success |   
                                 						  
                                 | 1 | a bad length has been given |  
 
 
  
            	 
            
               Example:
 
               		 
               		
                This example demonstrates how the FormatMessage API can be used from a JVM compiled COBOL program. 
                  		  
      $set ans85 mf defaultbyte"00" case
      $ if jvmgen set
      $ set remove"internal" remove"event"
      $end
       copy "windows.cpy".
 
       program-id. geterror.
       special-names.
          call-convention 74 is winapi.
       data division.
       working-storage section.
 
      $if jvmgen set
      $ if NOP64 set
        01 native-pointer     is typedef pic x(4) comp-5.
      $ else
        01 native-pointer     is typedef pic x(8) comp-5.
      $ end
      $else
        01 native-pointer     is typedef pointer.
      $end
 
       01 format-message-group.
        03 last-error                   DWORD.
        03 message-pointer              native-pointer.
        03 format-type                  DWORD.
        03 bytes-returned               DWORD.
        03 last-error-display           pic 9(2).
 
       local-storage section.
       01 ls-message-buffer                pic x(1024).
 
       linkage section.
       01 lnk-message-buffer               pic x(1024).
       procedure division.
      $if jvmgen set
           call "cob32api"
      $end
 
           display "First 20 system error messages"
 
           perform display-error varying last-error from 0 by 1
              until last-error = 20
 
           stop run.
 
       display-error.
           move 0 to format-type
           add FORMAT-MESSAGE-ALLOCATE-BUFFER to format-type
           add FORMAT-MESSAGE-FROM-SYSTEM to format-type
 
           call winapi FormatMessage
              using by value     format-type
                    by value     0 size 4       *> lpSource ignored
                    by value     last-error     *> error number
                    by value     0 size 4       *> LangID ignored
                    by reference message-pointer*> pointer to mess.
                    by value     0 size 4       *> min size of buffer
                    by value     0 size 4       *> arguments ignored
              returning bytes-returned
           end-call
 
           if bytes-returned > 0 and
                   bytes-returned < length of ls-message-buffer
 
      $if jvmgen set
      *> use the managed memory instead of the native memory
              set address of lnk-message-buffer to
                      address of ls-message-buffer
      
      *> Copy the native memory to to the managed memory
              call "JVM_UNSAFE_NATIVE_MEMCOPY" using
                 by value message-pointer
                 by value bytes-returned
                 by value address of ls-message-buffer
              end-call
      $else
              set address of lnk-message-buffer to message-pointer
      $end
              move last-error to last-error-display
              display " " last-error-display " =  "
                      lnk-message-buffer (1:bytes-returned - 2) *> remove x"ODOA"
 
              call winapi "LocalFree"
                using by value message-pointer
             end-call
 
           end-if.