c# - 如何从 C# 将结构作为 C dll 中的指针传递

标签 c# c++

我正在开发简单的电话应用程序,我正在更改松下 pbx 分机的服务类别。为此,我使用“Tapi32.dll”,它具有 C++ 中的方法。现在根据我的需要,我必须传递两个整数指针类型的参数。一个参数已正确传递,但我无法传递第二个参数,即结构类型。

这是我的代码...

[DllImport("Tapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
unsafe private static extern int lineDevSpecific(int* hLine, int* lpParams);

[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
    [MarshalAs(UnmanagedType.I4)]
    public int dwMode=4;
    public int dwParam1=8;
}

unsafe static void Main(string[] args) {
    int vline=int.Parse("Ext101");
    int* hline = &vline;
    lineDevSpecific(hline, ref UserRec userrec);
}

最佳答案

[DllImport("Tapi32.dll", SetLastError=true)]
unsafe private static extern int lineDevSpecific(int* hLine, IntPtr lpParams);

unsafe static void Main(string[] args) {
    int vline=int.Parse("Ext101");
    int* hline=&vline;

    var sizeUserRec=Marshal.SizeOf(typeof(UserRec));
    var userRec=Marshal.AllocHGlobal(sizeUserRec);
    lineDevSpecific(hline, userRec);
    var x=(UserRec)Marshal.PtrToStructure(userRec, typeof(UserRec));
    Marshal.FreeHGlobal(userRec);
}

看看这个问题的答案

您可以找到更多内容来使编码更容易且更可重用。

关于c# - 如何从 C# 将结构作为 C dll 中的指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197195/

相关文章:

c# - 无法通过C#使用EmguCV打开mpg文件进行捕获

c++ - 返回非 const 引用的 Const 方法编译

c# - naudio 库中的 SignalGenerator 类 - 持续时间播放

c# - 如何使用 EF 4 和 SQL Server CE 3.5 对查询结果进行分页

c++ - WinApi 线程(指针错误)

c++ - 为什么 cv::imread 在包含 tensorflow 的 header 后返回 NULL

c++ - C memcmp 第三个参数类型

c++ - 访客模式说明

c# - 当我从任务中检索值时,如何更新父窗体上的 GUI?

c# - 网络核心 : Generic Repository Primary Id Key Performance in Entity Framework