Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用DEF从Visual Studio 2010中的DLL导出函数_C++_Visual Studio 2010_Dll - Fatal编程技术网

C++ 使用DEF从Visual Studio 2010中的DLL导出函数

C++ 使用DEF从Visual Studio 2010中的DLL导出函数,c++,visual-studio-2010,dll,C++,Visual Studio 2010,Dll,我继承了一个庞大的C++多项目解决方案,其中包含许多动态库,但没有任何动态库 __declspec(dllexport) 我认为不一定要插入任何dllexport(这将是一项艰巨的工作),但可以在相应的.dll之外使用.def文件 为了尝试,我从中构建了一个“DLL Hello World”项目,从头文件中删除了dllexport,但…失败得很惨。用我的话来说,我的关键问题是如何 "[..] use the .def file when building the DLL." 我的.def文件

我继承了一个庞大的C++多项目解决方案,其中包含许多动态库,但没有任何动态库

__declspec(dllexport)
我认为不一定要插入任何dllexport(这将是一项艰巨的工作),但可以在相应的.dll之外使用.def文件

为了尝试,我从中构建了一个“DLL Hello World”项目,从头文件中删除了dllexport,但…失败得很惨。用我的话来说,我的关键问题是如何

"[..] use the .def file when building the DLL."
我的.def文件是(我只使用Add方法尝试代码):


在Visual Studio 2010中构建DLL以导出Add方法时如何使用它?

在讨论此问题半天之后,我刚刚找到了解决方案:它已被描述。

要使用我自己的话恢复VS2010中使用.def文件导出符号的过程,请执行以下操作:

  • 告诉VS2010编译动态库(.dll)。这是在图书馆项目的属性页中完成的
  • 使用(至少当您的语言是C++时)创建模块定义文件(.def)。如果使用dllexport,则可以将已导出的.dll符号显示为。如果您还没有导出任何内容,请参阅post
  • 将.def添加到其属性页的库定义中
  • 编撰
  • 验证工作的正确性,例如通过打开依赖文件,例如.exe。您应该在依赖文件下面的依赖关系树中看到刚刚编译的库。不应有任何错误或警告,例如没有红色

  • 如果您有关于.def文件的更多问题,请查看terminus“模块定义文件”

    是否可以向您的
    添加功能显示原型?
    静态双添加(双a,双b)
    ,在命名空间
    MathFuncs
    的类
    MyMathFuncs
    中放置为
    public
    ,是否导出该类?不知道,不过还是要谢谢你的提示。Win32是从DLL导出的“纯C接口”函数的一个例子。你使用<代码>外部“C”<代码>,你不使用接口上的C++对象,你不在函数之外抛出C++异常(实现可以是C++,但是接口是纯C),但是你似乎想要导出C++类(静态)方法……整个的点是:你不必做2, 3和5。如果您想重命名导出,您只能真正使用.def文件。在我的情况下,我不愿意在数百个已有代码的文件中添加dllexport。特别是因为它将来可能会改变(不是我的改变)。实际上,该代码是为MinGW开发的。我希望在不更改任何代码的情况下自动导出。这自然会引出下一个明显的问题:如何确定像
    这样的“损坏”名称?Add@MyMathFuncs@MathFuncs@@SANNN@Z
    用于任意类和方法?在我的具体案例中,我作弊了:我先用dllexport创建了一个.dll,提取了符号,然后用提取的符号构建了.def,最后再次删除了dllexport。在一般情况下,如何确定损坏的名称?是的,您完全颠倒了。dllexport确保损坏的名称是正确的,即使在更改之后也是如此。你可以用一张地图。
    LIBRARY   MathFuncsDll
    EXPORTS 
    ?Add@MyMathFuncs@MathFuncs@@SANNN@Z