托管C++;C#中的dll:只能引用无参数构造函数

托管C++;C#中的dll:只能引用无参数构造函数,c#,c++,dll,dllexport,C#,C++,Dll,Dllexport,我尝试在VS2010中导入一个第三方DLL作为管理C++链接到C。据我所知,这应该是可能的。通过添加引用,dll也可以正常加载,但我无法访问命名空间中的任何内容,即使整个dll的内容在对象浏览器中可见 但是有一个例外:如果我在DLL中公开类(我有源代码),我可以访问类的无参数构造函数,但仅此而已。 我尝试过各种解决方案,包括将所有内容封装在extern“C++”中,但这没有任何区别 我可能做错了什么?请注意,C++项目没有DLLMIN文件。 类在C++项目中声明如下: #ifndef _POIN

我尝试在VS2010中导入一个第三方DLL作为管理C++链接到C。据我所知,这应该是可能的。通过添加引用,dll也可以正常加载,但我无法访问命名空间中的任何内容,即使整个dll的内容在对象浏览器中可见

但是有一个例外:如果我在DLL中公开类(我有源代码),我可以访问类的无参数构造函数,但仅此而已。 我尝试过各种解决方案,包括将所有内容封装在
extern“C++”
中,但这没有任何区别

我可能做错了什么?请注意,C++项目没有DLLMIN文件。

类在C++项目中声明如下:

#ifndef _POINT_H
#define _POINT_H
***usings***
namespace NS {
    public class __declspec(dllexport) Point
    {
    private:
        double* pstart_;
        int n_;
    public :
        Point()
        : pstart_(0), n_(0)
        {}
         Point(double x, double y)
        : pstart_(new double[2]), n_(2)
        {
        pstart_[0] = x;
        pstart_[1] = y;
        }
    Methods etc...
    }
}

它们不是托管类,即使它们是使用C++/CLI编译器编译的。这会将它们转换为程序集清单中的不透明值类型,否则在C#中就没用了。一个可用的托管类需要声明为ref类。很明显,作者并不打算让你使用这些类,尽管有证据表明他不知道自己在做什么。这是否意味着P/Invoke可能是我唯一的选择?与代码的作者交谈,你很可能会在这里找到他。Hans Passant的评论是正确的。