/EXPORT (exporta uma função)

Exporta uma função por nome, ordinal ou dados do programa.

Sintaxe

/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]

Comentários

A opção /EXPORT especifica uma função ou item de dados a serem exportados do programa para que outros programas possam chamar a função ou usar os dados. As exportações geralmente são definidas em uma DLL.

O entryname é o nome da função ou do item de dados, como deve ser usado pelo programa que faz a chamada. ordinal especifica um índice na tabela de exportações no intervalo de 1 a 65.535; se você não especificar um ordinal, o LINK atribuirá um. A palavra-chave NONAME exporta a função apenas como um ordinal, sem um entryname.

A palavra-chave DATA especifica que o item exportado é um item de dados. O item de dados no programa cliente deve ser declarado usando extern __declspec(dllimport).

Há quatro métodos para exportar uma definição, listados na ordem recomendada de uso:

  1. __declspec(dllexport) no código fonte

  2. Uma declaração EXPORTS em um arquivo .def

  3. Uma especificação /EXPORT em um comando da LINK

  4. Uma diretiva comment no código fonte, da forma #pragma comment(linker, "/export: definition ").

Todos esses métodos podem ser usados no mesmo programa. Quando o LINK desenvolve um programa que contém exportações, também cria uma biblioteca de importação, a menos que um arquivo .exp seja usado na compilação.

O LINK usa formas decoradas de identificadores. O compilador decora um identificador quando cria o arquivo .obj. Se entryname for especificado para o vinculador em sua forma não decorada (como aparece no código-fonte), o LINK tentará corresponder ao nome. Se não encontrar uma correspondência exclusiva, o LINK emitirá uma mensagem de erro. Use a ferramenta DUMPBIN para obter a forma de nome decorado de um identificador quando você precisar especificá-lo para o vinculador.

Observação

Não especifique a forma decorada de identificadores C que são declarados como __cdecl ou __stdcall.

Se você precisar exportar um nome de função não decorado e tiver exportações diferentes dependendo da configuração de build (por exemplo, em builds de 32 ou 64 bits), poderá usar arquivos DEF diferentes para cada configuração. (As diretivas condicionais do pré-processador não são permitidas em arquivos DEF.) Como alternativa, você pode usar uma diretiva #pragma comment antes de uma declaração de função, conforme mostrado aqui, onde PlainFuncName é o nome não decorado e _PlainFuncName@4 é o nome decorado da função:

#pragma comment(linker, "/export:PlainFuncName=_PlainFuncName@4")
BOOL CALLBACK PlainFuncName( Things * lpParams)

Para definir esta opção do vinculador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. Selecione a página de propriedades Propriedades da Configuração>Vinculador>Linha de Comando.

  3. Insira a opção na caixa Opções Adicionais.

Para definir esta opção do vinculador por meio de programação

Confira também

Referência de vinculador MSVC
Opções de vinculador MSVC