代码之家  ›  专栏  ›  技术社区  ›  colithium

在C++语言中使用C++ DLL

  •  0
  • colithium  · 技术社区  · 16 年前

    我正试图从C++应用程序中消耗一个用C++编写的DLL。我有C++的DLL(旋风物理引擎)的第三方源代码,不想手动将它移植到C语言中。

    在C++项目中
    我把它改成输出一个DLL。我把它改成使用/clr标志。我把它改为使用多线程调试DLL(/mdd),因为它是唯一与/clr兼容的,而且也是编译的。

    在C项目中
    我添加了对dll的引用。我正在使用Cyclone名称空间。

    起初,名称空间下什么都没有。我认为这是因为在C++代码中,所有类都声明为没有访问修饰符,默认为私有。因此,对于“粒子”类,我将定义改为:

    public class Particle
    {
    //...
    }
    

    现在,我可以从C代码成功地声明一个类型为particle的变量。但是,IntelleSense和对象浏览器报告粒子为结构(?)它根本不包含任何方法。C++代码在“公共的”访问修饰符之后声明了一堆方法,所以我不知道问题是什么。

    例如,

    public:
    void integrate(real duration);
    

    我做错什么了?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Johannes Gustafsson    16 年前

    粒子类不是托管类,因此它被视为结构。您需要使用ref关键字使其成为托管的和垃圾收集的。您还需要对引用它的其他所有类执行相同的操作,这可能是一个问题。我认为最好的解决方案是创建一个内部使用粒子类的托管包装类。然后.NET可以引用这个包装类。

    参见 here :

        2
  •  1
  •   Glenn    16 年前

    我以前还没有真正遇到过你的问题,但是我以前在C++中使用过C++ DLL。通常在调用这样的dll时,您将使用 dllImport 关键字。基本上,您可以定义一个类,该类从C++ DLL中导入所有类型和方法。然后可以调用这些包装类。

    我远不是它的专家,但我已经使用它来访问win32方法和其他一些我需要使用的库。

    This codeplex上的链接有一些链接工具可能会有所帮助。但最重要的可能是互操作助手。它可以为C++的DLL生成C语言包装器。

    这不是你所要求的,但我认为换个方向可能会有所帮助。

        3
  •  0
  •   AaronLS    16 年前

    尝试用REF关键字声明C++类:

    public ref class Particle
    
        4
  •  0
  •   Luke Narramore    16 年前

    您有对COM Interop的引用吗?