我有一个用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指令或汇编引用?)< / p>
我应该在C ++代码中编写更多内容以使dll正常工作,还是在引用它时我做错了什么?我知道如果我是明确的链接,我必须在我的C#代码中使用“DllImport”,但这不是我想要做的。
非常感谢!
答案 0 :(得分:1)
有几种方法可以在C#中使用C ++库。
对于简单的场景,PInvoke可能是最简单的。对于托管代码和非托管代码的更复杂的交互,我建议使用互操作语言编写混合模式dll。如果那些不适合你,请使用COM。
要解决您收到的错误:您无法从C#项目添加对C ++库的引用 - 它们是完全不同的语言,具有不同的内存管理系统,不同的类型系统,不同的一切(嗯,很多东西) )。此外,您无法将数据结构(如矢量,地图或集合)从非托管代码传递到托管代码。
答案 1 :(得分:0)
在c#项目中使用c ++代码,你有两个选择:
您可能感兴趣的链接:Wrapping Visual C++ in C#