如何调用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了。