/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:
__declspec(dllexport) no código fonte
Uma declaração EXPORTS em um arquivo .def
Uma especificação /EXPORT em um comando da LINK
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
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.
Selecione a página de propriedades Propriedades da Configuração>Vinculador>Linha de Comando.
Insira a opção na caixa Opções Adicionais.
Para definir esta opção do vinculador por meio de programação
- Consulte AdditionalOptions.