Python中的ctypes库

0 投票
2 回答
570 浏览
提问于 2025-04-16 21:21

我想在Python中使用OpcDaNet.dll这个文件。为此,我使用了ctypes这个库。但是为了能使用我感兴趣的功能,我需要创建一个OpcServer对象的实例。我该如何用ctypes来做到这一点呢?

谢谢大家的回答!

2 个回答

1

其实,如果你使用ctypes模块,是无法创建OpcServer对象的实例的。因为C语言并不是面向对象的语言。如果你用C++来制作一个.dll文件,你需要创建一个C接口,比如在程序中使用extern "C"。如果你在这个.dll文件中返回一个对象,Python的函数是无法接收到这个对象的。如果我没记错的话。如果你真的想在.dll文件中返回一个对象,也许可以考虑使用boost.python来开发这个.dll文件。

1

要在使用CTypes时使用C++的概念,比如对象和类,你需要为你正在使用的类创建一个C接口。这个过程在第二个回答中有详细说明,可以在这里查看。如果你无法访问想要调用的外部库的源代码,你可以尝试自己写一个简单的库,把OpcDaNet.dll封装起来。如果你需要从这个库中调用很多不同的函数,这可能会比较麻烦。不过不幸的是,由于C++处理名称修饰的方式,CTypes和C++本质上是不兼容的。

撰写回答