0

我在 C 代码中有 3 个全局变量:一个 int 和两个指向结构的指针。我必须将它们编组为 C# 代码中的公共静态成员,但我找不到任何解决方案。我必须提到,修改 C 代码绝对是最后的选择。

我必须编组这个全局:

extern const    msdk_FileSystemInterface*       m_fileInterface;

这是我到目前为止尝试过的,但没有编译:

    [DllImport("foo.so", EntryPoint = "m_fileInterface")]
    private static extern IntPtr _m_fileInterface { get; set; }
    public static msdk_FileSystemInterface m_fileInterface 
    { 
        get
        {
            return (msdk_FileSystemInterface)Marshal.PtrToStructure(_m_fileInterface, typeof(msdk_FileSystemInterface));
        }
    }

.

    [DllImport("foo.so", EntryPoint = "m_fileInterface")]
    private static extern IntPtr _m_fileInterface;
    public static msdk_FileSystemInterface m_fileInterface 
    { 
        get
        {
            return (msdk_FileSystemInterface)Marshal.PtrToStructure(_m_fileInterface, typeof(msdk_FileSystemInterface));
        }
    }

msdk_FileSystemInterface 结构在 C# 代码中可用(已编组)。

有没有人有编组全局变量的解决方案或者是不可能的,我真的必须让他们将它们包装在一个结构中或在 C 代码中添加 setter 和 getter?

4

1 回答 1

2

您可以使用 GetProcAddress 获取导出的全局变量的地址。您无法使用 DllImport 让编组器完成此操作。

所以你的两个选择是:

  1. 使用 GetProcAddress 并自己进行所有编组。
  2. 将 getter 和 setter 添加到 C 代码中,让编组器从那里完成繁重的工作。

我个人会选择选项2。

于 2013-05-28T08:55:58.633 回答