繁体   English   中英

在c#中使用myStruct制作IntPtr,但是c ++ dll期待myStruct *,而不是IntPtr

[英]Made IntPtr from myStruct in c#, but c++ dll is expecting a myStruct*, not an IntPtr

在我的c#main中,我做到了

        myStruct ret_vals;
        IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ret_vals));

        Marshal.StructureToPtr(ret_vals, ptr, false);

MyStruct有一个指向其中另一个结构的指针。 根据Intelllisense(编译错误),我的C ++ dll函数期望指向MyStruct,而不是IntPtr。 以下内容无法编译

       DoAT.atClass1 cl = new DoAT.atClass1();

      cl.read_file( ptr);

顺便说一句,我的c ++函数声明为

    public ref class atClass1
{
    public:
          int read_file(MyStruct & ret_vals)    ;

};

建议表示赞赏。

在C ++ / CLI中使用引用时不应使用& ,就像在常规C ++中一样,而是使用% 这意味着您必须定义C ++ / CLI函数:

public ref class atClass1
{
public:
    int read_file(MyStruct % ret_vals);
};

这样你就可以使用.NET参考参数调用你的函数:

DoAT.atClass1 cl = new DoAT.atClass1();
cl.read_file(ref ret_vals);

不需要Marshal级!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM