本人需要在C#中调用C++代码,故而建立了一个CLR项目,建立了四个文件,分别是两个纯C++文件“CPPClassifier.h”和“CPPClassifier.cpp”,还有两个是C++与C#混合编程的文件“DarknetClassifier.h”和“DarknetClassifier.cpp”。编译时报错“现有的 TypeRef 应有对应的 TypeDef(Impl),但它没有”,如图 在网上搜素一番资料之后发现是托管代码与非托管代码的问题,CLR默认是托管代码,而“CPPClassifier.h”和“CPPClassifier.cpp”是纯C++代码,是非托管代码,所以需要在“CPPClassifier.h”的开头添加#pragma unmanaged,该语句指明以下部分安装非托管代码编译。 C++与C#混合编程的文件“DarknetClassifier.h”中,对于包含的纯C++的头文件,也要指定按照非托管代码的方式编译 #pragma unmanaged和#pragma managed之间的部分为C++的头文件,所以用#pragma unmanaged指定为非托管代码,#pragma managed指定后面的部分为托管代码。 OpenCV的坑 我的项目中使用了OpenCV库,我一般都是用属性表来配置OpenCV的,但是在这次的项目中,总是出现“无法解析的外部命令/符号”,就直接对项目的属性进行修改,问题就解决了,原因未知。博客[https://blog.csdn.net/Raink_LH/article/details/105052656]中也遇到了相同的问题。