给一个字符串:
msg="hello world"
Run Code Online (Sandbox Code Playgroud)
如何将其定义为ctypes.c_void_p()数据类型?
以下代码产生"无法转换为指针"异常:
data=ctypes.c_void_p(msg)
Run Code Online (Sandbox Code Playgroud)
data需要是void*C中的类型,因为它被传递给DLL.
我假设有一种方法可以使用包打包/解压缩字符串struct,但不幸的是我对这个过程非常不熟悉.
给出以下代码:
import ctypes
ip="192.168.1.1"
thisdll = ctypes.cdll['aDLL']
thisdll.functionThatExpectsAnIP(ip)
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确地将其打包为期望它作为c_ulong数据类型的DLL?
我尝试过使用:
ip_netFrmt = socket.inet_aton(ip)
ip_netFrmt_c = ctypes.c_ulong(ip_netFrmt)
Run Code Online (Sandbox Code Playgroud)
但是,该c_ulong()方法返回错误,因为它需要一个整数.
有没有办法struct.pack用来实现这个目标?
我正在维护一些利用接口的Java代码(让我们称之为BunchOfConstants)来简单地存储大量的公共静态最终字符串.有时,这些字符串名称会更改或添加/删除字符串名称.(这对维护来说有点令人头疼)
这个接口的唯一当前用途是在稍后的一个丑陋的if/then结构中比较输入,如下所示:
if(BunchOfConstants.CONSTANT1.equals(whatImLookingFor)){
doSomeStuff(whatImLookingFor)
}else if(BunchOfConstants.CONSTANT2.equals(whatImLookingFor)){
doSomeStuff(whatImLookingFor)
}else if(BunchOfConstants.CONSTANT3.equals(whatImLookingFor)){
doSomeStuff(whatImLookingFor)
}
...
Run Code Online (Sandbox Code Playgroud)
我认为创建一个实现Iterable的类甚至是一个将这些数据存储在hashMap中的类会更优雅.
我无法弄清楚为什么原始开发人员决定使用这个设计的接口,因为接口从未在任何地方实际实现过.有没有人有任何意见?
你是否同意将这些成员作为常量的可迭代类更合适?