,c#,c++,visual-studio-2010,dll,C#,C++,Visual Studio 2010,Dll" /> ,c#,c++,visual-studio-2010,dll,C#,C++,Visual Studio 2010,Dll" />

C# C代码可以';";见;我的C++;动态链接库 我有一个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 \ifndef BeamAn\u类 #定义一个类 #定义DllExport\uuu declspec(DllExport) #包括 #包括 使用名称空间std; 公共类DllExport BeamAn { 公众: 比曼(); ~BeamAn(); bool SetGeometry(vector);//我没有把DllExport放在这里,因为我已经为全班做了。这样做没关系,对吧? //其他公共方法也是一种东西 私人: //私事 } #恩迪夫 在我的C++项目中,我通常向C++ DLL添加引用(右击项目,添加引用。.LIB和.h文件在DLL的同一个文件夹中)。< /P>

C# C代码可以';";见;我的C++;动态链接库 我有一个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 \ifndef BeamAn\u类 #定义一个类 #定义DllExport\uuu declspec(DllExport) #包括 #包括 使用名称空间std; 公共类DllExport BeamAn { 公众: 比曼(); ~BeamAn(); bool SetGeometry(vector);//我没有把DllExport放在这里,因为我已经为全班做了。这样做没关系,对吧? //其他公共方法也是一种东西 私人: //私事 } #恩迪夫 在我的C++项目中,我通常向C++ DLL添加引用(右击项目,添加引用。.LIB和.h文件在DLL的同一个文件夹中)。< /P>,c#,c++,visual-studio-2010,dll,C#,C++,Visual Studio 2010,Dll,但是看起来VisualStudio无法“看到”我的类的方法。我可以创建BeamAn类型的对象,但不能使用它的任何方法。 例如,我可以这样做: BeamAn contBeam=新的BeamAn(); 但不能在类内使用任何方法或属性,如:contBeam.SetLoadFactors(1.0,1.2) Visual Studio表示“BeamAn不包含“SetLoadFactors”的定义,并且找不到接受第一个参数类型“BeamAn”的扩展方法“SetLoadFactors”(是否缺少using指令

但是看起来VisualStudio无法“看到”我的类的方法。我可以创建BeamAn类型的对象,但不能使用它的任何方法。 例如,我可以这样做: BeamAn contBeam=新的BeamAn(); 但不能在类内使用任何方法或属性,如:contBeam.SetLoadFactors(1.0,1.2)

Visual Studio表示“BeamAn不包含“SetLoadFactors”的定义,并且找不到接受第一个参数类型“BeamAn”的扩展方法“SetLoadFactors”(是否缺少using指令或程序集引用?)

< >我在C++代码中应该写更多的东西来让DLL正常工作,或者在引用时我做了什么错误吗?我知道如果我是明确的链接,我必须在我的C代码中使用“DLLIMPART”,但这不是我想要做的。

非常感谢!

< P>在C++项目中使用C++代码,你有2个选项:

在管理C++类中包装C++类
  • 使用名为swig的库
  • 一个可能引起你兴趣的链接:

    < P>在C++项目中使用C++代码,你有2个选项:

    在管理C++类中包装C++类
  • 使用名为swig的库

  • 一个可能引起您兴趣的链接:

    < P> > C++中有几种方法可以使C++库可用。
  • Use PInvoke -直接调用C++代码。请参阅更多信息。也请参阅通用参考。
  • 使用互操作语言围绕非托管代码创建托管包装。如果您是Microsoft world,我建议您使用C++/CLI创建混合模式库(包含托管和非托管代码的DLL)。这是一篇介绍C++/CLI的简短(旧)文章
  • 使C++ C++可访问。因为代码不是你的,这一个可能对你不有用。请参阅关于C++和com的更多信息。
  • 对于简单的场景,PInvoke可能是最简单的。对于托管和非托管代码的更复杂交互,我建议使用互操作语言编写混合模式dll。如果这些不适合您,请使用COM


    解决你接收到的错误:你不能从C++项目中添加对C++库的引用——它们是完全不同的语言,它们有不同的内存管理系统、不同类型的系统、不同的所有东西(很多东西)。从非托管代码到托管代码。

    < P> C++中有几种方法可以使C++库可用。
  • Use PInvoke -直接调用C++代码。请参阅更多信息。也请参阅通用参考。
  • 使用互操作语言围绕非托管代码创建托管包装。如果您是Microsoft world,我建议您使用C++/CLI创建混合模式库(包含托管和非托管代码的DLL)。这是一篇介绍C++/CLI的简短(旧)文章
  • 使C++ C++可访问。因为代码不是你的,这一个可能对你不有用。请参阅关于C++和com的更多信息。
  • 对于简单的场景,PInvoke可能是最简单的。对于托管和非托管代码的更复杂交互,我建议使用互操作语言编写混合模式dll。如果这些不适合您,请使用COM


    解决你接收到的错误:你不能从C++项目中添加对C++库的引用——它们是完全不同的语言,它们有不同的内存管理系统、不同类型的系统、不同的所有东西(很多东西)。从非托管代码到托管代码。

    我在尝试重复本教程时遇到与Pescador7相同的错误:我在尝试重复本教程时遇到与Pescador7相同的错误: