求助python调用dll函数里,关于数据指针和长度应该如何获得呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助python调用dll函数里,关于数据指针和长度应该如何获得呢?相关的知识,希望对你有一定的参考价值。
sock = opener.open(url,'rb')
rcv = sock.read()
dll=ctypes.windll.LoadLibrary(Vcode.dll')
a = c_char_p(rcv)
short= (c_short * 4)()
var1=" "
dll.GetByteVcode(a,short,"1",var1)
print var1
GetByteVcode这句帮助里说dll.GetByteVcode(数据指针,数据长度,"1",var1)
搜索了半天,据说ptyhon么有什么指针的概念,所以完全没有头绪。
软件调用说明里给了一个vb调用的例程如下:
Dim a() As Byte
Dim n As Long
Dim b As Long
a = Xhttp(url)
n = VarPtr(a(0))
b = UBound(a) + 1
Result = Space$(100)
Gt = GetByteVcode(n, b, 1, Result)
python里有类似vb的VarPtr和UBound函数么?
C#调用DLL,参数是指针,怎么做?
参考技术A [DllImport(@"xxx.dll",EntryPoint
=
"KMeans",
CharSet
=
CharSet.Auto)]
public
static
extern
void
KMeans(
[MarshalAs(UnmanagedType.LPArray,
SizeParamIndex
=
3)]
double[]
rawdata,
//KMeans原始数据
int
rows,
//数据点个数
int
K,
//聚类个数
int
size);
//表示第一个参数的长度
上面是从我自己的一段正确可执行的代码中取出来的一段代码(我的代码是通过C#调用C++写的一个算法程序)。‘KMeans原始数据’对应的C++函数参数就是一个指针。
在C#中通过PInvoke技术调用C/C++的代码的时候,在C#这边是使用数组类型来实现。并且要加上[MarshalAs(UnmanagedType.LPArray,
SizeParamIndex
=
3)],SizeParamIndex参数是指定这个数组(在C#中)或指针对应的存储空间(在C/C++中)的长度。
以上是关于求助python调用dll函数里,关于数据指针和长度应该如何获得呢?的主要内容,如果未能解决你的问题,请参考以下文章