我的目标是将现有的C ++类(旧版代码,存储在一组*.h
文件中)编译为DLL,以便可以将其进一步集成到C#应用程序中。
为此,最好使用MS Visual Studio。我没有这种环境的经验,所以我尝试了在MSDN和其他SO答案中找到的幼稚方法:
.h
文件中使用的包含引用的基础.
目录这将在目录中创建几个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
接下来,我决定尝试创建一个新的新库项目,只是为了观察差异以获得一些提示,但这无济于事-即使在文件结构方面也存在太多差异...
我的问题是:
答案 0 :(得分:0)
我认为您的步骤可能是正确的,并且我认为使用C#应用程序中的代码的正确方法。您绝对可以通过导入方法从C#调用C ++库。
您只想从库中导出要使用的方法。尝试将__declspec(dllexport)与这些方法一起使用。请检查此链接:
https://msdn.microsoft.com/en-us/library/a90k134d.aspx。
另外,输出应该在build文件夹而不是源代码文件夹
答案 1 :(得分:0)
可以将.h
文件编译到库中,编译器不在乎-但是UI可以。
不过,您可以通过直接编辑.vcxproj
文件来进行调整。
在这样做的同时,请确保<ClCompile>
部分包含:
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
请注意,您可以使用命令行来构建DLL项目:
"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe" -target:Clean,Build
(假设您当前的目录是.vcxproj
所在的目录)