为了实现互操作性,通常需要在 C# 代码中从 C 共享库 (DLL) 调用函数。但是,当 C 函数属于使用私有成员变量的类时,在 C# 代码中直接创建该类的实例就变得不可能了。
使用间接 P/Invoke 的解决方法
解决方案在于间接 P/Invoke 方法。这涉及到在 C 类外部创建调用类成员函数的非成员函数。
创建非成员函数
对于 C 类中的每个成员函数,创建一个调用成员函数的外部“C”函数。这允许您间接访问私有成员变量。
在 C# 中创建包装类
一旦在 C DLL 中定义了这些非成员函数,您就可以在 C# 中创建一个包装类来与它们交互。这个包装类将管理两个平台之间传递的尴尬的 IntPtr 并提供一个更可用的接口。
P/调用包装类函数
在 C# 包装类中,您可以 P/Invoke 在 C DLL 中创建的非成员函数。这些函数将依次调用适当的成员函数,从而授予您访问 C 类功能的权限。
限制和建议
这种方法的缺点是需要管理 IntPtr,这可能很麻烦。为了提高可用性,请考虑创建一个反映 C 类功能的 C# 接口。在将函数调用委托给 P/Invoke 函数的包装类中实现 C# 接口。这种方法消除了手动管理 IntPtr 的需要,并提供了更清晰的编程模型。
替代选项
如果您无法访问原始 C 代码,您可以创建一个新的 DLL,它包装原始 DLL 并提供 P/Invoke 层。这允许您间接访问 C 类,而无需修改原始 DLL 的实现。
以上是当涉及私有成员变量时,如何从C#代码访问C类?的详细内容。更多信息请关注PHP中文网其他相关文章!