FileDocCategorySizeDatePackage
ImportTypelib.javaAPI DocApache Ant 1.706521Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.taskdefs.optional.dotnet

ImportTypelib

public class ImportTypelib extends org.apache.tools.ant.Task
Import a COM type library into the .NET framework.

This task is a wrapper to .NET's tlbimport; it imports a tlb file to a NET assembly by generating a binary assembly (.dll) that contains all the binding metadata. It uses date timestamps to minimise rebuilds.

Example

<importtypelib
srcfile="xerces.tlb"
destfile="xerces.dll"
namespace="Apache.Xerces"/>
since
Ant 1.6
ant.task
category="dotnet"

Fields Summary
private static final org.apache.tools.ant.util.FileUtils
FILE_UTILS
private File
srcFile
input file; precedes options
private File
destFile
/out:file
private String
namespace
/namespace:[string]
private boolean
useSysArray
/sysarray
private boolean
unsafe
/unsafe
private String
extraOptions
extra commands?
Constructors Summary
Methods Summary
public voidexecute()
Create a typelib command

exception
BuildException if something goes wrong with the build

        log("This task is deprecated and will be removed in a future version\n"
            + "of Ant.  It is now part of the .NET Antlib:\n"
            + "http://ant.apache.org/antlibs/dotnet/index.html",
            Project.MSG_WARN);
        validate();
        log("Importing typelib " + srcFile
            + " to assembly " + destFile
            + " in namespace " + namespace, Project.MSG_VERBOSE);
        //rebuild unless the dest file is newer than the source file
        if (!isExecuteNeeded()) {
            return;
        }

        NetCommand command = new NetCommand(this, "ImportTypelib", "tlbimp");
        command.setFailOnError(true);
        command.addArgument(srcFile.toString());
        //fill in args
        command.addArgument("/nologo");
        command.addArgument("/out:" + destFile);
        command.addArgument("/namespace:", namespace);
        if (useSysArray) {
            command.addArgument("/sysarray");
        }
        if (unsafe) {
            command.addArgument("/unsafe");
        }
        command.addArgument(extraOptions);
        command.runCommand();
    
private booleanisExecuteNeeded()
Test for disassembly being needed; use existence and granularity correct date stamps

return
true iff a rebuild is required.

        if (!destFile.exists()) {
            log("Destination file does not exist: a build is required",
                    Project.MSG_VERBOSE);
            return true;
        }
        long sourceTime = srcFile.lastModified();
        long destTime = destFile.lastModified();
        if (sourceTime > (destTime + FILE_UTILS.getFileTimestampGranularity())) {
            log("Source file is newer than the dest file: a rebuild is required",
                    Project.MSG_VERBOSE);
            return true;
        } else {
            log("The output file is up to date", Project.MSG_VERBOSE);
            return false;
        }

    
public voidsetDestFile(java.io.File destFile)
This method names the output file. This is an operation which is required to have been performed.

param
destFile the output file.


                               
        
        this.destFile = destFile;
    
public voidsetExtraOptions(java.lang.String extraOptions)
set any extra options that are not yet supported by this task.

param
extraOptions the options to use.

        this.extraOptions = extraOptions;
    
public voidsetNamespace(java.lang.String namespace)
This method sets what namespace the typelib is to be in. This is an operation which is required to have been performed.

param
namespace the namespace to use.

        this.namespace = namespace;
    
public voidsetSrcFile(java.io.File srcFile)
This method sets which is the source .tlb file. This is an operation which is required to have been performed.

param
srcFile the source file.

        this.srcFile = srcFile;
    
public voidsetUnsafe(boolean unsafe)
do you want unsafe code.

param
unsafe a boolean value.

        this.unsafe = unsafe;
    
public voidsetUseSysArray(boolean useSysArray)
set this to map a COM SafeArray to the System.Array class

param
useSysArray a boolean value.

        this.useSysArray = useSysArray;
    
protected voidvalidate()
validation code

throws
BuildException if validation failed

        if (destFile == null) {
            throw new BuildException("destination file must be specified");
        }
        if (destFile.isDirectory()) {
            throw new BuildException(
                    "destination file is a directory");
        }
        if (srcFile == null || !srcFile.exists()) {
            throw new BuildException(
                    "source file does not exist");
        }
        if (srcFile.isDirectory()) {
            throw new BuildException(
                    "source file is a directory");
        }
        if (namespace == null) {
            throw new BuildException("No namespace");
        }