C# 在C中封送全局变量#
我在C代码中有3个全局变量:一个int和两个指向结构的指针。我必须在C代码中将它们作为公共静态成员封送,但我找不到任何解决方案。我必须提到,修改C代码是绝对的最后一个选项 我必须整理这个全球:C# 在C中封送全局变量#,c#,c,pinvoke,marshalling,C#,C,Pinvoke,Marshalling,我在C代码中有3个全局变量:一个int和两个指向结构的指针。我必须在C代码中将它们作为公共静态成员封送,但我找不到任何解决方案。我必须提到,修改C代码是绝对的最后一个选项 我必须整理这个全球: extern const msdk_FileSystemInterface* m_fileInterface; 这是我到目前为止尝试过的,但没有编译: [DllImport("foo.so", EntryPoint = "m_fileInterface")] priva
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));
}
}
msdk#U文件系统接口结构在C#代码中可用(已封送)
是否有人有marsahalling全局变量的解决方案,或者说这是不可能的,我真的必须将它们包装在一个结构中,或者将setter和getter添加到C代码中?您可以使用GetProcAddress获取导出全局变量的地址。您无法让封送员使用DllImport执行此操作 因此,您的两个选择是:
就个人而言,我会选择选项2。这是不可能的。不幸的是,你不得不做你不想做的事。@Matthew这不是不可能的。GetProcAddress解决了这个问题。@DavidHeffernan噢,太酷了!我不知道!虽然ofc无法处理它。谢谢你的回答!我会选择二传手和二传手。使用GetProcAddress不是我的项目的选项。
[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));
}
}