python调用dll实例_请教下 Python 调用 DLL 的问题

我想要调用一个别人给的 dll 文件,总是出错,于是我想着写个最简单的 hello world 版的 dll 文件,调用一下,来确定我在网上找的调用代码是正确的

//main.cpp

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int sum(int a, int b) {

return a + b;

}

//main.h

int sum(int, int);

我用 Code::Blocks 自带的 GCC 和 VS2008 分别编译出了 dll 文件,但是调用的时候都会报错

OSError: [WinError 193] %1 不是有效的 Win32 应用程序。

我的环境是 Windows 7(64),Python 3.6.0(64),我也将生成的 dll 放到 XP 上运行过,XP 上是 Python2.7(32)

File "C:\Python27\lib\ctypes\__init__.py", line 440, in LoadLibrary

return self._dlltype(name)

File "C:\Python27\lib\ctypes\__init__.py", line 362, in __init__

self._handle = _dlopen(self._name, mode)

WindowsError: [Error 14001]

尝试多次,我按照上边教程中的,在 Linux 下生成 so 库,运行的比较正常

这是 python 代码,后来我想到下载了一个标准库 msvcrt,可以正常调用

#!/bin/env python

# -*- coding: utf-8 -*-

from ctypes import cdll

# mydll = cdll.LoadLibrary('msvcrt.dll')

# mydll.printf(b"hello world!")

mydll = cdll.LoadLibrary('test.dll')

print(mydll)

所以我感觉问题还是出在 dll 这方面,这是我的分析:

1,可能是调用方式问题,查询看 dll 有不同的调用方式有,stdcall cdecl 等,不过我换用 ctypes 的 windll 调用还是不行

2,可能是编码问题,查询过程中有 ANSI,和 Unicode 两种,看到有人给出如下代码,我用 msvcrt 测试,不过我运行会提示 AttributeError: function 'printf' not found

libHandle = ctypes.cdll.kernel32.LoadLibraryW('msvcrt.dll')

lib = ctypes.CDLL(None, handle=libHandle)

lib.printf(b"hello world!")

现在有点不知从哪里入手解决,先谢谢了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值