[英]C# code can't “see” the methods in my C++ dll
我有一个用C ++编写的代码(我没有写过),想在C#中使用它,所以我决定制作一个dll,然后从那里开始使用此类。
我对C ++的了解很少,在C#项目中引用此类的方法时遇到问题。
C ++代码如下所示:
#ifndef BeamAn_class
#define BeamAn_class
#define DllExport __declspec( dllexport )
#include <vector>
#include <cmath>
using namespace std;
public class DllExport BeamAn
{
public:
BeamAn();
~BeamAn();
bool SetGeometry(vector<double>); //I didn't put the DllExport here because I already did it for the whole class. It's okay to do this, right?
//other public methods an stuff
private:
//private methods an stuff
}
#endif
在我的C#项目中,我通常将引用添加到C ++ dll(右键单击该项目,添加引用。.lib和.h文件位于dll的同一文件夹中)。
但是看起来Visual Studio无法“看到”我的类的方法。 我可以创建BeamAn类型的对象,但是不能使用其任何方法。 例如,我可以这样做:BeamAn contBeam = new BeamAn(); 但是不能使用类中的任何方法或属性,例如:contBeam.SetLoadFactors(1.0,1.2);
Visual Studio说:“ BeamAn不包含'SetLoadFactors'的定义,也找不到可以接受第一个参数类型'BeamAn'的扩展方法'SetLoadFactors'(您是否缺少using指令或程序集引用?)
我还应该在C ++代码中写一些东西来使dll正常工作,还是在引用它时做错什么? 我知道,如果我进行显式链接,则必须在C#代码中使用“ DllImport”,但这不是我想要的。
非常感谢你!
有几种方法可以使C ++库在C#中可用。
对于简单的情况,PInvoke可能是最简单的。 对于托管和非托管代码的更复杂的交互,我建议您编写一种具有互操作语言的混合模式dll。 如果这些都不适合您,请使用COM。
为了解决您收到的错误:您不能从C#项目中添加对C ++库的引用-它们是完全不同的语言,具有不同的内存管理系统,不同的类型系统,不同的所有东西(嗯,很多东西)。 同样,您不能将数据结构(例如向量,映射或集合)从非托管代码传递到托管代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.