用vc生成可被python调用的dll文件

前提已经有.c 和.i文件

用swid编译了.i文件生成了wrap.c文件和.py文件

vc创建dll工程

将.h加入到头文件中.c文件和wrap.c文件添加到源文件中 将.i文件添加到工程目录下
Tools->Options->Directories中修改include 和lib 添加python里的include 和libs
把\libs\python27.lib复制一份 并且改名为python27_d.lib
修改 pyconfig.h (我只修改了前两样 后面没修改也成功了)
#ifdef _DEBUG
# define Py_DEBUG
#endif
为#ifdef _DEBUG
//# define Py_DEBUG
#endif
修改
# ifdef _DEBUG
# pragma comment(lib,"python24_d.lib")
# else
# pragma comment(lib,"python24.lib")
# endif /* _DEBUG */

# ifdef _DEBUG
# pragma comment(lib,"python24.lib")
# else
# pragma comment(lib,"python24.lib")
# endif /* _DEBUG */
修改object.h
修改
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif

#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
// #define Py_TRACE_REFS
#endif
把生成的name.dll文件改为_name.pyd 将前面的.py和_name.pyd文件放到一个文件中(我试的时候只有.pyd文件就可以)
新建一个test文件:
import name
aa = name.somefunction()
print(aa)

时间: 2024-08-05 03:05:31

用vc生成可被python调用的dll文件的相关文章

JAVA调用C++ dll文件之JNI接口研究——分布函数计算

分别对VS平台运行GNU库和JAVA调用VS2010 x64位系统做过一定研究,接下来将试图生成一个调用概率统计函数的dll,将其嵌入JAVA程序中运行. 当准备生成带有正态分布函数的dll文件时,出现如下错误: 1>     正在创建库 d:\documents\visual studio 2010\Projects\GetNrompdf\x64\Debug\GetNrompdf.lib 和对象 d:\documents\visual studio 2010\Projects\GetNromp

vs2013 调用只有dll文件的动态库(三)

当dll内包含多个算法时,我们的动态库dll项目创建与编译还可以简洁化如下: 源文件Windll.cpp: 1 #include"Windll.h" 2 int add(int x, int y) 3 { 4 return x + y; 5 } 6 int mult(int x, int y) 7 { 8 return x*y; 9 } 头文件Windll.h: 1 #ifndef LIB_H 2 #define LIB_H 3 #define DLL_API extern "

Python调用 c++ dll,并且使用Py2exe打包

1.首先下载并且 安装 python2.7 ,py2exe 链接 https://www.python.org/downloads/release/python-2713/   , http://www.py2exe.org/ 2.准备好  dll 文件 3.新建一文件夹,如 ,在此文件夹下新建俩python 代码文件,如 ;其中 setup.py内容为 from distutils.core import setup import py2exe setup(console = ['test.p

利用vs2010制作C语言 dll文件,并在其它程序中调用该dll文件

一.为什么需要dll 代码复用是提高软件开发 效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架, 如ATL.MFC等,它们都以源代码的形式发布.由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”.“白盒复用”的缺点 比较多,总结起来有4点. 暴露了源代码: 容易与程序员的“普通”代码发生命名冲突: 多份拷贝,造成存储浪费: 更新功能模块比较困难. 实际上,以上4点概括起来就是

C#调用C++ DLL 文件

说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来.如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下. 要做的东西需要引用C++编写的DLL,刚开始从网上看到觉得挺麻烦的就没有仔细研究,如今看到别人写的文章,感觉也不是多难.下面分享一下: 1.整一个DLL 使用C++创建一个动态库项目,应用程序设置中选择“DLL” 打开CPPDemo.cpp文件,添加如下代码 #include "stdafx.h"extern "C&qu

VS2010 C#调用C++ DLL文件 【转】

http://www.soaspx.com/dotnet/csharp/csharp_20110406_7469.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用.本篇文章将引导你快速理解这个调用的过程. 步骤 1. 创建一个CSharpInvokeCPP的解决方案: 2. 创建一个C++的动态库项目: 3. 在应用程序设置中,选择“DLL”,其他按照默认选项: 最后点

对C#调用C++ dll文件进行总结

在实际项目工作中,经常用到C#调用C++ 或者C编写的dll文件. dll支持一般函数声明和类的定义声明,但是一般为了简化,都是 采用函数声明的方式.这里主要并不是写 dll的编写. 先在vs中创建一个dll项目 添加一个新的cpp文件 测试代码如下: struct Student   //定义了一个结构体,结构体中包含了基本类型,字符串类型和数组,基本上能满足很多情况了{ int no; char name[10]; int score[4];}; extern "C" __decl

Python调用C++DLL函数出错String类型问题

调用c++ 函数原型如下,一直失败,请个日志断点发现 参数未能正确解析. int EXPORT init_ner(string cfg_path); typedef int (*Proc_init_ner)(string cfg_path); int EXPORT fini_ner(); typedef int (*Proc_fini_ner)(); string EXPORT process(string input_jsn_str); typedef string (*Proc_proces

python调用window dll和linux so例子

#!/usr/bin/python# -*- coding: UTF-8 -*-#python dll.pyimport win32api# 打开记事本程序,在后台运行,即显示记事本程序的窗口win32api.ShellExecute(0, 'open', 'notepad.exe', '','',1)import win32processwin32process.CreateProcess('c:\\windows\\notepad.exe', '', None , None , 0 ,win