如何调用c++;c#中带有类指针作为返回值的dll函数?

如何调用c++;c#中带有类指针作为返回值的dll函数?,c#,c++,return,pinvoke,dllimport,C#,C++,Return,Pinvoke,Dllimport,好吧,我有点迷路了。也许有人能帮我 在我的头文件中得到了这个: class A { public: virtual B* Foo() const = 0; }; cpp文件: extern "C" __declspec( dllexport ) B* A_1(A* aObj) { if(aObj) return aObj->Foo(); else return 0; } 我尝试将其导入到我的c#文件中,如下所示: [DllImport("Wrapper.dl

好吧,我有点迷路了。也许有人能帮我

在我的头文件中得到了这个:

class A
{
public:
    virtual B* Foo() const = 0;
};
cpp文件:

extern "C" __declspec( dllexport ) B* A_1(A* aObj) 
{
if(aObj)
    return aObj->Foo();
else 
    return 0;
}
我尝试将其导入到我的c#文件中,如下所示:

[DllImport("Wrapper.dll")]
private static extern IntPtr A_1(IntPtr aObj);
然后

public IntPtr Foo()
{
    return A_1(aObj);
}

但这不起作用。后来我不得不使用这个B对象从中调用一个方法

缺少CallingConvention属性,它是Cdecl。aObj成为有效IntPtr的可能性也不大。如果你想得到帮助,你需要做得比“它不起作用”更好。唯一的答案是“修复它”。如果你不能提供详细信息,我们也不能。很抱歉,我认为我的代码的简化版本足以获得一些建议。在我的特定代码中,我接收到MarshalDirectiveException:传递给非托管代码的LDWrapper.WrapperBase类型必须具有StructLayout属性。在这种情况下,aObj是麻烦制造者。我们仍然无法对此做出任何解释。是时候让你做一个SSCCE了。