鱼C论坛

 找回密码
 立即注册
查看: 1907|回复: 8

[已解决]Python 动态链接库 (DLL) 初始化例程失败

[复制链接]
发表于 2020-2-26 11:12:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我通过这种方法将 C++ 程序转化成了 .pyd 。但当我在 IDLE 中导入这个模块时,显示 “动态链接库 (DLL) 初始化例程失败”:

1.png

百度了一下解决方法,但全是针对 TensorFlow 的……

请求大家帮忙解决,回答自有鱼币奖励!
最佳答案
2020-2-26 16:55:58


是的,照微软教程写的cpp例子:
#include <Windows.h>
#include <cmath>
#include <Python.h>

const double e = 2.7182818284590452353602874713527;

double sinh_impl(double x) {
        return (1 - pow(e, (-2 * x))) / (2 * pow(e, -x));
}

double cosh_impl(double x) {
        return (1 + pow(e, (-2 * x))) / (2 * pow(e, -x));
}

PyObject* tanh_impl(PyObject*, PyObject* o) {
        double x = PyFloat_AsDouble(o);
        double tanh_x = sinh_impl(x) / cosh_impl(x);
        return PyFloat_FromDouble(tanh_x);
}

static PyMethodDef superfastcode_methods[] = {
        // The first property is the name exposed to Python, fast_tanh, the second is the C++
        // function name that contains the implementation.
        { "fast_tanh", (PyCFunction)tanh_impl, METH_O, nullptr },

        // Terminate the array with an object containing nulls.
        { nullptr, nullptr, 0, nullptr }
};

static PyModuleDef superfastcode_module = {
        PyModuleDef_HEAD_INIT,
        "superfastcode1",                        // Module name to use with Python import statements
        "Provides some functions, but faster",  // Module description
        0,
        superfastcode_methods                   // Structure that defines the methods of the module
};

PyMODINIT_FUNC PyInit_superfastcode1() {
        return PyModule_Create(&superfastcode_module);
}

后四个函数应该是关键

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-26 11:30:27 | 显示全部楼层
1,重启一哈
2,再编译一次C++程序?

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 11:32:08 | 显示全部楼层
qiuyouzhi 发表于 2020-2-26 11:30
1,重启一哈
2,再编译一次C++程序?

谢谢,试过了,还是没用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 11:46:02 | 显示全部楼层
zltzlt 发表于 2020-2-26 11:32
谢谢,试过了,还是没用

用IDE生成?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 13:14:23 | 显示全部楼层
我看微软的教程试着依葫芦画瓢成功了(实际还是不会),里面对cpp的写法是有要求的,应该是这个原因,微软的教程应该可以借鉴一下:编写 Python 的 C++ 扩展 https://docs.microsoft.com/zh-cn/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2019

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2 谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 16:33:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 16:34:40 | 显示全部楼层
hrp 发表于 2020-2-26 13:14
我看微软的教程试着依葫芦画瓢成功了(实际还是不会),里面对cpp的写法是有要求的,应该是这个原因,微软的 ...

好麻烦啊~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 16:55:58 | 显示全部楼层    本楼为最佳答案   


是的,照微软教程写的cpp例子:
#include <Windows.h>
#include <cmath>
#include <Python.h>

const double e = 2.7182818284590452353602874713527;

double sinh_impl(double x) {
        return (1 - pow(e, (-2 * x))) / (2 * pow(e, -x));
}

double cosh_impl(double x) {
        return (1 + pow(e, (-2 * x))) / (2 * pow(e, -x));
}

PyObject* tanh_impl(PyObject*, PyObject* o) {
        double x = PyFloat_AsDouble(o);
        double tanh_x = sinh_impl(x) / cosh_impl(x);
        return PyFloat_FromDouble(tanh_x);
}

static PyMethodDef superfastcode_methods[] = {
        // The first property is the name exposed to Python, fast_tanh, the second is the C++
        // function name that contains the implementation.
        { "fast_tanh", (PyCFunction)tanh_impl, METH_O, nullptr },

        // Terminate the array with an object containing nulls.
        { nullptr, nullptr, 0, nullptr }
};

static PyModuleDef superfastcode_module = {
        PyModuleDef_HEAD_INIT,
        "superfastcode1",                        // Module name to use with Python import statements
        "Provides some functions, but faster",  // Module description
        0,
        superfastcode_methods                   // Structure that defines the methods of the module
};

PyMODINIT_FUNC PyInit_superfastcode1() {
        return PyModule_Create(&superfastcode_module);
}

后四个函数应该是关键

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-27 10:42:54 | 显示全部楼层
hrp 发表于 2020-2-26 16:55
是的,照微软教程写的cpp例子:

好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-8 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表