首页 文章

在C#中使用C dll

提问于
浏览
0

我正在尝试从C#应用程序中使用用C编写的dll . 我有C dll(Cyclone物理引擎)的第三方源代码,并且不想手动将其移植到C# .

In the C++ project
我改变它输出一个DLL . 我将其更改为使用/ clr标志 . 我将其更改为使用多线程调试DLL(/ MDd),因为这是唯一一个与/ clr兼容并且也已编译的 .

In the C# project
我添加了对dll的引用 . 我正在使用旋风命名空间 .

起初,命名空间下绝对没有任何内容 . 我认为这是因为在C代码中,所有类都声明没有访问修饰符,默认是私有的 . 因此,对于“粒子”类,我将定义更改为:

public class Particle
{
//...
}

现在我可以从C#代码成功声明一个Particle类型的变量 . 然而,intellesense和对象浏览器报告粒子是一个结构(?),它根本不包含任何方法 . c代码在“public:”访问修饰符之后声明了一堆方法,所以我不知道问题是什么 .

例如,

public:
void integrate(real duration);

我究竟做错了什么?

4 回答

  • 0

    Particle类不是托管类,因此它被视为结构 . 您需要使用ref关键字来进行托管和垃圾回收 . 您还需要对引用它的每个其他可能有问题的类执行相同的操作 . 我认为最好的解决方案是创建一个在内部使用Particle类的托管包装类 . 然后可以通过.net引用此包装类 .

    here

  • 2

    我之前没有碰到你的确切问题,但我之前在c#中使用过C dlls . 通常在调用dll时会使用dllImport关键字 . 基本上,您可以定义一个从c dll导入所有类型和方法的类 . 然后,您可以调用这些包装类 .

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

    Codeplex上的This链接有一些可能有用的链接工具 . 但最重要的可能是Interop助手 . 它可以为你的c dll生成C#包装器 .

    这不是你要求的,但我认为看一个不同的方向可能会有所帮助 .

  • 1

    尝试使用ref关键字声明c类:

    public ref class Particle
    
  • 0

    你有COM Interop的参考吗?

相关问题