我在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#代码中可用(已经编组)。
有没有人有一个marsahalling全局变量的解决方案或者是不可能的,我真的必须将它们包装在一个结构中,或者将setter和getter添加到C代码中?
答案 0 :(得分:2)
您可以使用GetProcAddress获取导出的全局变量的地址。你不能让编组人员用DllImport来做这件事。
所以你的两个选择是:
我个人会选择选项2。