打包dll文件
1.新建动态链接库
2.配置相关环境
2.1 删除相关生成文件
将生成的文件全都删除,便于后续写自己的函数
2.2 配置相关运行库文件
1.将自己项目用到的库文件包含到项目中,比如:pcl库文件
包含目录添加:
<C++>
D:\program\PCL 1.10.1\include\pcl-1.10
D:\program\PCL 1.10.1\3rdParty\VTK\include\vtk-8.2
D:\program\PCL 1.10.1\3rdParty\Qhull\include
D:\program\PCL 1.10.1\3rdParty\FLANN\include
D:\program\PCL 1.10.1\3rdParty\Eigen\eigen3
D:\program\PCL 1.10.1\3rdParty\Boost\include\boost-1_72
D:\OpenCV3.4.0\opencv\build\include\opencv
D:\OpenCV3.4.0\opencv\build\include\opencv2
D:\OpenCV3.4.0\opencv\build\include
</C++>
2.库目录添加:
<C++>
D:\program\PCL 1.10.1\3rdParty\VTK\lib
D:\program\PCL 1.10.1\3rdParty\Qhull\lib
D:\program\PCL 1.10.1\3rdParty\FLANN\lib
D:\program\PCL 1.10.1\3rdParty\Boost\lib
D:\program\PCL 1.10.1\lib
D:\OpenCV3.4.0\opencv\build\x64\vc14\lib
D:\OpenCV3.4.0\opencv\build\x64\vc15\lib
</c++>
3.附加依赖项
附加依赖项添加:
<C++>
pcl_commond.lib
pcl_featuresd.lib
pcl_filtersd.lib
pcl_io_plyd.lib
pcl_iod.lib
pcl_kdtreed.lib
pcl_keypointsd.lib
pcl_mld.lib
pcl_octreed.lib
pcl_outofcored.lib
pcl_peopled.lib
pcl_recognitiond.lib
pcl_registrationd.lib
pcl_sample_consensusd.lib
pcl_searchd.lib
pcl_segmentationd.lib
pcl_stereod.lib
pcl_surfaced.lib
pcl_trackingd.lib
pcl_visualizationd.lib
libboost_atomic-vc142-mt-gd-x64-1_72.lib
libboost_bzip2-vc142-mt-gd-x64-1_72.lib
libboost_chrono-vc142-mt-gd-x64-1_72.lib
libboost_container-vc142-mt-gd-x64-1_72.lib
libboost_context-vc142-mt-gd-x64-1_72.lib
libboost_coroutine-vc142-mt-gd-x64-1_72.lib
libboost_date_time-vc142-mt-gd-x64-1_72.lib
libboost_exception-vc142-mt-gd-x64-1_72.lib
libboost_fiber-vc142-mt-gd-x64-1_72.lib
libboost_filesystem-vc142-mt-gd-x64-1_72.lib
libboost_graph-vc142-mt-gd-x64-1_72.lib
libboost_graph_parallel-vc142-mt-gd-x64-1_72.lib
libboost_iostreams-vc142-mt-gd-x64-1_72.lib
libboost_locale-vc142-mt-gd-x64-1_72.lib
libboost_log-vc142-mt-gd-x64-1_72.lib
libboost_log_setup-vc142-mt-gd-x64-1_72.lib
libboost_math_c99-vc142-mt-gd-x64-1_72.lib
libboost_math_c99f-vc142-mt-gd-x64-1_72.lib
libboost_math_c99l-vc142-mt-gd-x64-1_72.lib
libboost_math_tr1-vc142-mt-gd-x64-1_72.lib
libboost_math_tr1f-vc142-mt-gd-x64-1_72.lib
libboost_math_tr1l-vc142-mt-gd-x64-1_72.lib
libboost_mpi-vc142-mt-gd-x64-1_72.lib
libboost_numpy38-vc142-mt-gd-x64-1_72.lib
libboost_prg_exec_monitor-vc142-mt-gd-x64-1_72.lib
libboost_program_options-vc142-mt-gd-x64-1_72.lib
libboost_python38-vc142-mt-gd-x64-1_72.lib
libboost_random-vc142-mt-gd-x64-1_72.lib
libboost_regex-vc142-mt-gd-x64-1_72.lib
libboost_serialization-vc142-mt-gd-x64-1_72.lib
libboost_system-vc142-mt-gd-x64-1_72.lib
libboost_test_exec_monitor-vc142-mt-gd-x64-1_72.lib
libboost_thread-vc142-mt-gd-x64-1_72.lib
libboost_timer-vc142-mt-gd-x64-1_72.lib
libboost_type_erasure-vc142-mt-gd-x64-1_72.lib
libboost_unit_test_framework-vc142-mt-gd-x64-1_72.lib
libboost_wave-vc142-mt-gd-x64-1_72.lib
libboost_wserialization-vc142-mt-gd-x64-1_72.lib
libboost_zlib-vc142-mt-gd-x64-1_72.lib
flann-gd.lib
flann_cpp-gd.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
qhull_d.lib
qhullcpp_d.lib
qhullstatic_d.lib
qhullstatic_r_d.lib
qhull_p_d.lib
qhull_r_d.lib
vtkChartsCore-8.2-gd.lib
vtkCommonColor-8.2-gd.lib
vtkCommonComputationalGeometry-8.2-gd.lib
vtkCommonCore-8.2-gd.lib
vtkCommonDataModel-8.2-gd.lib
vtkCommonExecutionModel-8.2-gd.lib
vtkCommonMath-8.2-gd.lib
vtkCommonMisc-8.2-gd.lib
vtkCommonSystem-8.2-gd.lib
vtkCommonTransforms-8.2-gd.lib
vtkDICOMParser-8.2-gd.lib
vtkDomainsChemistry-8.2-gd.lib
vtkexpat-8.2-gd.lib
vtkFiltersAMR-8.2-gd.lib
vtkFiltersCore-8.2-gd.lib
vtkFiltersExtraction-8.2-gd.lib
vtkFiltersFlowPaths-8.2-gd.lib
vtkFiltersGeneral-8.2-gd.lib
vtkFiltersGeneric-8.2-gd.lib
vtkFiltersGeometry-8.2-gd.lib
vtkFiltersHybrid-8.2-gd.lib
vtkFiltersHyperTree-8.2-gd.lib
vtkFiltersImaging-8.2-gd.lib
vtkFiltersModeling-8.2-gd.lib
vtkFiltersParallel-8.2-gd.lib
vtkFiltersParallelImaging-8.2-gd.lib
vtkFiltersPoints-8.2-gd.lib
vtkFiltersProgrammable-8.2-gd.lib
vtkFiltersSelection-8.2-gd.lib
vtkFiltersSMP-8.2-gd.lib
vtkFiltersSources-8.2-gd.lib
vtkFiltersStatistics-8.2-gd.lib
vtkFiltersTexture-8.2-gd.lib
vtkFiltersTopology-8.2-gd.lib
vtkFiltersVerdict-8.2-gd.lib
vtkfreetype-8.2-gd.lib
vtkGeovisCore-8.2-gd.lib
vtkgl2ps-8.2-gd.lib
vtkhdf5-8.2-gd.lib
vtkhdf5_hl-8.2-gd.lib
vtkImagingColor-8.2-gd.lib
vtkImagingCore-8.2-gd.lib
vtkImagingFourier-8.2-gd.lib
vtkImagingGeneral-8.2-gd.lib
vtkImagingHybrid-8.2-gd.lib
vtkImagingMath-8.2-gd.lib
vtkImagingMorphological-8.2-gd.lib
vtkImagingSources-8.2-gd.lib
vtkImagingStatistics-8.2-gd.lib
vtkImagingStencil-8.2-gd.lib
vtkInfovisCore-8.2-gd.lib
vtkInfovisLayout-8.2-gd.lib
vtkInteractionImage-8.2-gd.lib
vtkInteractionStyle-8.2-gd.lib
vtkInteractionWidgets-8.2-gd.lib
vtkIOAMR-8.2-gd.lib
vtkIOCore-8.2-gd.lib
vtkIOEnSight-8.2-gd.lib
vtkIOExodus-8.2-gd.lib
vtkIOExport-8.2-gd.lib
vtkIOExportOpenGL2-8.2-gd.lib
vtkIOGeometry-8.2-gd.lib
vtkIOImage-8.2-gd.lib
vtkIOImport-8.2-gd.lib
vtkIOInfovis-8.2-gd.lib
vtkIOLegacy-8.2-gd.lib
vtkIOLSDyna-8.2-gd.lib
vtkIOMINC-8.2-gd.lib
vtkIOMovie-8.2-gd.lib
vtkIONetCDF-8.2-gd.lib
vtkIOParallel-8.2-gd.lib
vtkIOParallelXML-8.2-gd.lib
vtkIOPLY-8.2-gd.lib
vtkIOSQL-8.2-gd.lib
vtkIOTecplotTable-8.2-gd.lib
vtkIOVideo-8.2-gd.lib
vtkIOXML-8.2-gd.lib
vtkIOXMLParser-8.2-gd.lib
vtkjpeg-8.2-gd.lib
vtkjsoncpp-8.2-gd.lib
vtklibharu-8.2-gd.lib
vtklibxml2-8.2-gd.lib
vtklz4-8.2-gd.lib
vtkmetaio-8.2-gd.lib
vtkNetCDF-8.2-gd.lib
vtkogg-8.2-gd.lib
vtkParallelCore-8.2-gd.lib
vtkpng-8.2-gd.lib
vtkproj-8.2-gd.lib
vtkRenderingAnnotation-8.2-gd.lib
vtkRenderingContext2D-8.2-gd.lib
vtkRenderingContextOpenGL2-8.2-gd.lib
vtkRenderingCore-8.2-gd.lib
vtkRenderingFreeType-8.2-gd.lib
vtkRenderingGL2PSOpenGL2-8.2-gd.lib
vtkRenderingImage-8.2-gd.lib
vtkRenderingLabel-8.2-gd.lib
vtkRenderingLOD-8.2-gd.lib
vtkRenderingOpenGL2-8.2-gd.lib
vtkRenderingVolume-8.2-gd.lib
vtkRenderingVolumeOpenGL2-8.2-gd.lib
vtksqlite-8.2-gd.lib
vtksys-8.2-gd.lib
vtktiff-8.2-gd.lib
vtkverdict-8.2-gd.lib
vtkViewsContext2D-8.2-gd.lib
vtkViewsCore-8.2-gd.lib
vtkViewsInfovis-8.2-gd.lib
vtkzlib-8.2-gd.lib
opengl32.lib
opencv_world340.lib
opencv_world340d.lib
</C++>
2.3 其他环境配置
1.不使用预编译头
2.修改输出目录
3.预处理器修改
添加DLL_EXPORTS
3.编写代码
3.1 编写.h文件
<C++>
#pragma once
#include <vector>
using namespace std;
#if defined(_MSC_VER)
#include <direct.h>
#define GetCurrentDir _getcwd
#elif defined(__unix__)
#define GetCurrentDir getcwd
#else
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
DLL_API void SeaweedPhenotype(char* inputPath, char* outputPath);
#ifdef __cplusplus
}
#endif
</C++>
3.2 编写.cpp文件
<C++>
#include "SeaweedPhenotype.h"
void SeaweedPhenotype(char* inputPath, char* outputPath) {
}
</C++>
3.调用用dll文件
3.1 c#调用dll
1.类中导入dll文件<C#>
[DllImport("PointCloudPhenotype.dll", EntryPoint = "SeaweedPhenotype", CallingConvention = CallingConvention.Cdecl)]
public static extern void SeaweedPhenotype(string inputPath, string outputPath);
</C#>
2.使用SeaweedPhenotype函数
<C#>
string plyPath = outputPath + "/DenseModel/result.ply";
string txtResultPath = outputPath+"/result.txt";
SeaweedPhenotype(plyPath,txtResultPath);
</C#>
注意C#与C++函数传递的对应
<>
c++ -> c#
char* -> string
<>