代码之家  ›  专栏  ›  技术社区  ›  Petr Kozelka

从现有的源创建MS VisualC++ DLL项目

  •  -3
  • Petr Kozelka  · 技术社区  · 6 年前

    我的目标是编译现有的C++类(遗留代码),存储在一组 *.h 文件),以便进一步集成到C应用程序中。

    为此,最好使用msvisualstudio。我没有这种环境的经验,所以我尝试了MSDN和其他so答案上的天真方法:

    • 从现有代码中归档|新|项目
    • 选择Visual C++
    • .h 文件夹
    • 指定了项目名称
    • 让向导查找并添加目录下的所有C++文件
    • 选择“使用Visual Studio”进行生成,项目类型为“动态链接库(DLL)项目”
    • 选中以下所有复选框(ATL、MFC、CLR)
    • 明确规定 .
    • 选中“版本设置”中的“与调试配置相同”
    • 单击“完成”按钮

    这将在目录中创建两个VS文件:

    mylibrary.sln
    mylibrary.vcxproj
    mylibrary.vcxproj.filters
    mylibrary.vcxproj.user
    

    F6 或选择 Build Rebuild solution 从菜单上。

    .dll

    .vs/mylibrary/v15/.suo
    .vs/mylibrary/v15/Browse.VC.db
    .vs/mylibrary/v15/Browse.VC.opendb
    .vs/mylibrary/v15/ipch/AutoPCH/efad7c74cd39331b/EXAMPLE.ipch
    Debug/mylibrary.log
    Debug/mylibrary.tlog/mylibrary.lastbuildstate
    

    接下来,我决定尝试创建一个新的库项目,只是为了观察差异以获得一些提示,但这没有帮助-有太多的差异,甚至在文件结构中。。。

    • 我选择MS Visual C++是一个很好的目的吗?
    • 如果是,我做错了什么?
    2 回复  |  直到 6 年前
        1
  •  0
  •   Ahmed Elias    6 年前

    我认为您的步骤可能是正确的,而且我认为使用C应用程序代码的正确方法是正确的。你可以通过导入方法从C++调用C++库。

    您只错过了从库中导出要使用的方法。尝试将\uu declspec(dllexport)与这些方法一起使用。请检查此链接:

    https://msdn.microsoft.com/en-us/library/a90k134d.aspx .

        2
  •  0
  •   user10404428    6 年前

    编译 .h 文件到库是可以的,编译器不关心-但是,用户界面关心。 不过,您可以通过直接编辑 .vcxproj 文件。

    <ClCompile> 章节包括:

      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
    

    "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe" -target:Clean,Build
    

    (这假设您当前的目录是 vcxproj先生