首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Microsoft Linker /Export参数

如何使用Microsoft Linker /Export参数
EN

Stack Overflow用户
提问于 2013-02-06 01:31:23
回答 3查看 3.3K关注 0票数 1

我想用Microsoft Linker从我的对象文件中手动导出函数。当我像这样使用每个函数的参数时,它工作得很好:

代码语言:javascript
复制
/Export:ExportedFunction1$qqsv /Export:ExportedFunction2$qqsv and so on...

然后,链接器自动分配正确的词条。然而,在导出表中,实际的导出名称是"ExportedFunction1$qqsv/ExportedFunction2$qqsv/etc..“,我尝试了参数,如下所示:

代码语言:javascript
复制
/Export:ExportedFunction1$qqsv,1,ExportedFunction1 /Export:ExportedFunction2$qqsv,2,ExportedFunction2

但是我想我使用的参数是错误的?!如何正确使用/Export参数为导出指定自己的名称?

附注:我使用的是Microsoft (R) Incremental Linker版本7.00.9210

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-21 04:02:20

下面是一个包含DEF文件的示例解决方案。

DLL-项目:

CppLib.h:

代码语言:javascript
复制
#ifdef CPPLIB_EXPORTS
#define CPPLIB_API __declspec(dllexport)
#else
#define CPPLIB_API __declspec(dllimport)
#endif

CPPLIB_API double MyFunction1(double);

CppLib.cpp:

代码语言:javascript
复制
CPPLIB_API double MyFunction1(double dd)
{
    return dd;
}

CppLib.def:

代码语言:javascript
复制
LIBRARY

EXPORTS
MySuperFunction=MyFunction1 @1

构建DLL。

如果我们在CppLib.DLL上运行,我们会得到:

代码语言:javascript
复制
...
    ordinal hint RVA      name

          2    0 0001101E ?MyFunction1@@YANN@Z = @ILT+25(?MyFunction1@@YANN@Z)
          1    1 0001101E MySuperFunction = @ILT+25(?MyFunction1@@YANN@Z)
...

使用CppLib.dll的控制台应用程序:

代码语言:javascript
复制
#include "CppLib.h"

#include <Windows.h>
#include <iostream>

int main()
{
    typedef double(*MY_SUPER_FUNC)(double);

    HMODULE hm = LoadLibraryW(L"CppLib.dll");
    MY_SUPER_FUNC fn1 = (MY_SUPER_FUNC)GetProcAddress(hm, "MySuperFunction"); // find by name
    MY_SUPER_FUNC fn2 = (MY_SUPER_FUNC)GetProcAddress(hm, MAKEINTRESOURCEA(1)); // find by ordinal

    std::cout << fn1(34.5) << std::endl; // prints 34.5
    std::cout << fn2(12.3) << std::endl; // prints 12.3

    return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2013-02-19 21:26:02

代码语言:javascript
复制
#pragma comment(linker, "/EXPORT:ExportedFunction1$qqsv=_YouMangledFunction1@@")
#pragma comment(linker, "/EXPORT:ExportedFunction2$qqsv=_YouMangledFunction2@@")
票数 3
EN

Stack Overflow用户

发布于 2013-02-19 05:21:21

我不相信您可以使用/Export命令行开关来实现这种控制,但是您可以使用.DEF文件来实现:

https://docs.microsoft.com/en-us/cpp/build/reference/exports

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14713419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档