user-0 提问: 关于Python调用C++库

回复:
user: user-1
content: 引用 1 楼 user-5 的回复:应该不是，我做过2天的这两个互相调用，感觉上给我一种调用DLL的感觉  朋友，我最近有个任务，就是Python要调用c++写的程序，这个c++写的程序里面又引用很多其他写好的程序。我对python不太懂，是把c++封装成dll还是怎么做？能不能具体说一说。。

user: user-2
content: 引用 4 楼 New_Vest 的回复:那像Python这样的语言就是去了“胶水语言”的意义了呗？！ 附：     1.这样是不是两个程序都得不停的判断判断文件是否存在，而且是否可以进行读写？     2.是不是得同时运行两个程序呢？虽然降低了耦合性，看上去是两个互不影响的进程，但是是不是增加了本身要实现的功能的复杂性呢？ 复制粘贴的心灵鸡汤  你可别全当真    当每个人的硬盘都是固态的时候 也许好用些

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！  那像Python这样的语言就是去了“胶水语言”的意义了呗？！ 附：     1.这样是不是两个程序都得不停的判断判断文件是否存在，而且是否可以进行读写？     2.是不是得同时运行两个程序呢？虽然降低了耦合性，看上去是两个互不影响的进程，但是是不是增加了本身要实现的功能的复杂性呢？

user: user-3
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！  ReadDirectoryChangesW  FindFirstChangeNotification

user: user-0
content: 引用 8 楼 xmnathan 的回复:[quote=引用 7 楼 New_Vest 的回复:] 不能能否在请教一个问题， 现在我的Python程序输出了一些坐标 x,y（值：0-1024），和这些坐标对应的要显示的文字 我想写个小程序，将以上输出的这些坐标和对应的文字显示在窗口的相位位置上， 没写过这样的程序，有点不知道从何入手，也不知道选择用什么来开发，想用MFC来开发可以吗？ 用C++用python都能实现的 [/quote] 不想那么麻烦，就想写个独立的小程序，用GDI的textout么？

user: user-2
content: 引用 7 楼 New_Vest 的回复:不能能否在请教一个问题， 现在我的Python程序输出了一些坐标 x,y（值：0-1024），和这些坐标对应的要显示的文字 我想写个小程序，将以上输出的这些坐标和对应的文字显示在窗口的相位位置上， 没写过这样的程序，有点不知道从何入手，也不知道选择用什么来开发，想用MFC来开发可以吗？ 用C++用python都能实现的

user: user-0
content: 引用 5 楼 xmnathan 的回复:[quote=引用 4 楼 New_Vest 的回复:] 那像Python这样的语言就是去了“胶水语言”的意义了呗？！ 附：     1.这样是不是两个程序都得不停的判断判断文件是否存在，而且是否可以进行读写？     2.是不是得同时运行两个程序呢？虽然降低了耦合性，看上去是两个互不影响的进程，但是是不是增加了本身要实现的功能的复杂性呢？ 复制粘贴的心灵鸡汤  你可别全当真    当每个人的硬盘都是固态的时候 也许好用些[/quote] 不能能否在请教一个问题， 现在我的Python程序输出了一些坐标 x,y（值：0-1024），和这些坐标对应的要显示的文字 我想写个小程序，将以上输出的这些坐标和对应的文字显示在窗口的相位位置上， 没写过这样的程序，有点不知道从何入手，也不知道选择用什么来开发，想用MFC来开发可以吗？

user: user-0
content: 引用 5 楼 xmnathan 的回复:[quote=引用 4 楼 New_Vest 的回复:] 那像Python这样的语言就是去了“胶水语言”的意义了呗？！ 附：     1.这样是不是两个程序都得不停的判断判断文件是否存在，而且是否可以进行读写？     2.是不是得同时运行两个程序呢？虽然降低了耦合性，看上去是两个互不影响的进程，但是是不是增加了本身要实现的功能的复杂性呢？ 复制粘贴的心灵鸡汤  你可别全当真    当每个人的硬盘都是固态的时候 也许好用些[/quote] 鸡汤喝的挺多了， 不过这确实是解决问题的一种思路，比如Python输出一些Log，然后用C++写个程序分析并经过处理之后显示这些Log，完全属于不同的功能对应。

user: user-4
content: 是的。      //test.cpp   1 #include <vector>   2 #include <stdio.h>   3 using namespace std;   4    5 vector<int> g_vecVar;     int g = 1;   6 extern "C"   7 {   8         void func()   9         {                g++;  10          g_vecVar.push_back(g);  11   12         for( int i = 0; i < g_vecVar.size() ;i++ )  13          printf( "%d\n", g_vecVar.at(i));  14         }  15 }   g++ test.cpp -fPIC -shared test.so     1 # -*- encoding: utf-8 -*-   2    3 import os   4 import ctypes   5    6 class test():   7     def __init__(self,):   8         self.lib_handle = ctypes.CDLL('./test.so')   9         self.testfunc = self.lib_handle.func  10   11   12 if __name__ == '__main__':  13     mytest = test();  14     for i in range(10):  15         mytest.testfunc();   执行python代码，输出结果为 2 2 3 2 3 4 2 3 4 5 . . . . . .

user: user-5
content: 应该不是，我做过2天的这两个互相调用，感觉上给我一种调用DLL的感觉

user: user-3
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！