首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用LPSTR调用python 3中的dll

用LPSTR调用python 3中的dll
EN

Stack Overflow用户
提问于 2016-04-21 19:22:29
回答 1查看 1.8K关注 0票数 1

我有一个名为.dllmy.dll,它有4个函数,在python3.5中调用:

myDLL = ctypes.cdll.LoadLibrary(Path:\to\my.dll)

我的问题是调用一个有LPSTR的函数

代码语言:javascript
复制
#include "stdafx.h"
#include "newheader.h"    
double  _stdcall pain_function(double arg1, double arg2, LPSTR arg_string_with_spaces)

其他3个对my.dll的调用工作正常。

下面是我为pain_function尝试的代码:

代码语言:javascript
复制
import ctypes
from ctypes import wintypes

# Load dll
myDLL = ctypes.WinDLL(Path:\to\my.dll)

# Call function 
pain_function = myDLL.pain_function

# Typecast the arguments
pain_function.argtypes = [ctypes.c_double, ctypes.c_double, wintypes.LPSTR]

# Typecast the return
pain_function.restype = ctypes.c_double


pain_return = pain_function(arg1, arg2, some_string)

pain_return返回一些荒谬的数字。我尝试了一些变体,主要是类似于:

代码语言:javascript
复制
some_string = ctypes.create_string_buffer(b' ' * 200)

我在这里和其他地方一起看过:

  1. python-ctypes-prototype-with-lpcstr-out-parameter
  2. 在DLL函数调用中使用字符串参数

将200空格的字符串传递给dll的正确方法是什么?

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-22 02:07:47

你说原型是:

代码语言:javascript
复制
double  _stdcall pain_function(double arg1, double arg2, LPSTR arg_string_with_spaces)

但使用:

代码语言:javascript
复制
myDLL = ctypes.cdll.LoadLibrary(Path:\to\my.dll)

对于__stdcall调用约定,应该是这样的:

代码语言:javascript
复制
myDLL = ctypes.WinDLL('Path:\to\my.dll')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36778681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档