查看: 21698|回复: 25
收起左侧

[Tribon] python文件生成的DLL文件,再使用python调用产生的问题

[复制链接]
发表于 2013-4-1 20:27 | 显示全部楼层 |阅读模式 来自: 中国山西太原
100金币
python文件生成的DLL文件,再使用python调用报错如下:
ImportError: dynamic module does not define init function (initmyjz)
请不要说DLL用C或者C++生成,TRIBON里的二次开发,必须要用PYTHON来生成,请问问题到底出在什么地方?谢谢!

回复

使用道具 举报

龙船学院
发表于 2013-4-2 12:27 | 显示全部楼层 来自: 中国江苏南通
tribon 并不支持.net 类型的DLL,楼主估计是借用相应软件生成了.NET的DLL,建议升级至AM,在调用.NET的DLL
回复

使用道具 举报

发表于 2013-4-2 13:49 | 显示全部楼层 来自: 中国上海
试着看看是不是路径问题
回复

使用道具 举报

发表于 2013-4-2 22:04 | 显示全部楼层 来自: 中国浙江舟山
路径问题,自己查一下环境变量。
回复

使用道具 举报

发表于 2013-4-3 08:28 | 显示全部楼层 来自: 中国上海
http://www.51cto.com/art/200510/9822_2.htm
好像有本书专门讲的c++ 和 python 互相嵌入
回复

使用道具 举报

发表于 2013-4-3 16:51 | 显示全部楼层 来自: 中国山东威海
MARK 下
回复

使用道具 举报

 楼主| 发表于 2013-4-3 20:55 | 显示全部楼层 来自: 中国山西太原
tianwai 发表于 2013-4-2 12:27
tribon 并不支持.net 类型的DLL,楼主估计是借用相应软件生成了.NET的DLL,建议升级至AM,在调用.NET的DLL

我看到已经有TRIBON调用的自定义的DLL,但是不知道别人是用什么办法生成的
回复

使用道具 举报

 楼主| 发表于 2013-4-3 20:56 | 显示全部楼层 来自: 中国山西太原
eattonton 发表于 2013-4-2 22:04
路径问题,自己查一下环境变量。

不是路径问题!
回复

使用道具 举报

 楼主| 发表于 2013-4-3 21:01 | 显示全部楼层 来自: 中国山西太原
digy 发表于 2013-4-3 16:51
MARK 下

标记?怎么标记?
回复

使用道具 举报

发表于 2013-4-5 16:44 | 显示全部楼层 来自: 中国山西太原
楼主什么程序需要这么强的保密性啊?
回复

使用道具 举报

发表于 2013-4-5 22:06 | 显示全部楼层 来自: 中国江苏南通
另壶冲 发表于 2013-4-5 16:44
楼主什么程序需要这么强的保密性啊?

DLL对于OD来说,没有任何秘密的,你懂的。。。。
回复

使用道具 举报

发表于 2013-4-6 10:20 | 显示全部楼层 来自: 中国广东深圳
这个很不好找的。。
回复

使用道具 举报

发表于 2013-4-6 10:39 | 显示全部楼层 来自: 中国山西太原
tianwai 发表于 2013-4-5 22:06
DLL对于OD来说,没有任何秘密的,你懂的。。。。

代码中加逻辑混淆的dll OD是不管用的, 那工具不是万能的。
回复

使用道具 举报

 楼主| 发表于 2013-4-6 14:22 | 显示全部楼层 来自: 中国山西太原
tianwai 发表于 2013-4-5 22:06
DLL对于OD来说,没有任何秘密的,你懂的。。。。

相对于PYC来说DLL还是保密性更强一点的
回复

使用道具 举报

发表于 2013-7-11 13:48 | 显示全部楼层 来自: 中国上海
对于DLL ,PYC,等软加密来说,安全系数都不高,有时间均能破解。相对软加密来说,使用加密狗(硬加密)则安全的多。
回复

使用道具 举报

 楼主| 发表于 2013-8-5 20:02 | 显示全部楼层 来自: 中国山西太原
Windows下面编译Python脚本为动态链接库的方法  

2012-04-09 10:18:57|  分类: 技术 |  标签:python  cython  dll   |字号大中小 [url=]订阅[/url]






假设相关文件都存放在 C:/test
Cython-0.15.1.tar.gz
pyshield-patch.windows.python23.tar.gz
test.py
test_vit.py
scripts.tar.gz

其中  pyshield-patch.windows.python23.tar.gz 可以从这里下载:http://www.dashingsoft.com/produ ... ows.python23.tar.gz
Cython-0.15.1.tar.gz  可以从 cython.org 下载,
scripts.tar.gz  解压后包含下列文件:
configure.ac
makefile.am
genconf.sh
文件内容参考附录。

test.py test_vit.py 是任意的测试脚本。
1. 安装 cygwin,下列包必须安装
autoconf,automake,libtool,gcc-3, make, mingw-32, python


2. 双击cygwin图标进入 cygwin 环境,执行下列命令,安装 cython
$ cp /cygdrive/c/test/Cython-0.15.1.tar.gz ./
$ tar xzf Cython-0.15.1.tar.gz
$ cd Cython-0.15.1
$ python -E setup.py install


3. 解压编译脚本和辅助文件到当前目录,拷贝需要转换的Python模块到当前目录,(假设工作目录是 $HOME)
$ cd ~
$ tar xzf /cygdrive/c/test/scripts.tar.gz
$ cp /cygdrive/c/test/test.py ./
$ cp /cygdrive/c/test/test_vit.py ./

$ tar xzf /cygdrive/c/test/pyshield-patch.windows.python23.tar.gz

4. 运行cython转换 py 成为 c文件。
$cython -2 test.py
$cython -2 test_vit.py

5. 如果还有其他模块,可以参考 Makefile.am 增加相应的内容。
一是在行
lib_LTLIBRARIES = libtest.la libtest_vit.la
后面增加 libNEW.la, 例如
lib_LTLIBRARIES = libtest.la libtest_vit.la libnew_test.la
二是增加相应的行
libnew_test_la_SOURCES = new_test.c
libnew_test_la_CPPFLAGS = $(MYCPPFLAGS)
libnew_test_la_LDFLAGS = $(MYLDFLAGS) -l$(LIBPYTHON)
libnew_test_la_LIBADD = $(LTLIBOBJS)

6. 生成 make 文件,这可能需要3分钟时间,尤其是第二条命令。
$ ./genconf.sh
$ ./configure

7. 运行 make ,生成扩展模块
$ make
$ ls .libs
生成的文件存放 .libs 子目录下面,一般是cyg为前缀,版本号为后缀
cygtest-0.dll
cygtest_vit-0.dll

8. 修改名称为 pyd ,拷贝到发布目录即可。
$ cp .libs/cygtest-0.dll /cygdrive/c/test/test.pyd
$ cp .libs/cygtest_vit-0.dll /cygdrive/c/test/test_vit.pyd
如果Python脚本更新之后,需要执行第四步重新生成 .c 源文件,然后执行第七步make即可。
如果需要增加新的模块,那么需要修改Makefile.am,然后需要执行第六步,重新生成 makefile文件。
上面的示例是针对Python2.3版本的,如果需要发布到其他版本,例如 2.6,那么
a. 修改 configure.ac
替换 AC_SUBST([PYTHON_VERSION], [2.3]) 为  AC_SUBST([PYTHON_VERSION], [2.6])
b. 下载 pyshield-patch.windows.python26.tar.gz 并解压到$HOME目录,下载地址和解压方式可参考上面示例(替换23为26即可)
c.  执行示例的第六步,重新生成 makefile文件
然后就可以调用 make 来创建python26的扩展模块了。
如果需要发布到python3000以后的版本,除了上面的修改,还需要在第四步使用 -3 参数,例如
$ cython -3 test.py
$ cython -3 test_vit.py
附录:
Makefile.am 内容:
AUTOMAKE_OPTIONS = foreign no-dependencies

# The source files
lib_LTLIBRARIES = libtest.la libtest_vit.la
libtest_la_SOURCES = test.c
libtest_la_CPPFLAGS = $(MYCPPFLAGS)
libtest_la_LDFLAGS = $(MYLDFLAGS) -l$(LIBPYTHON)
libtest_la_LIBADD = $(LTLIBOBJS)

libtest_vit_la_SOURCES = test_vit.c
libtest_vit_la_CPPFLAGS = $(MYCPPFLAGS)
libtest_vit_la_LDFLAGS = $(MYLDFLAGS) -l$(LIBPYTHON)
libtest_vit_la_LIBADD = $(LTLIBOBJS)

ACLOCAL_AMFLAGS = -I m4

EXTRA_DIST = config.rpath m4/ChangeLog

PYTHON_VERSION_NODOT := $(subst .,,$(PYTHON_VERSION))

MYCPPFLAGS=-I./windows/python$(PYTHON_VERSION_NODOT)/include
MYLDFLAGS=-L./windows/python$(PYTHON_VERSION_NODOT) -no-undefined
LIBPYTHON=python$(PYTHON_VERSION_NODOT)

confgiure.ac 内容
AC_PREREQ([2.60])
AC_INIT([cytest], [1.0.0], [jondy.zhao@gmail.com])
AC_CONFIG_MACRO_DIR([m4])

AC_SUBST([PYTHON_VERSION], [2.3])

CC=gcc-3
CFLAGS="-mno-cygwin"

AM_INIT_AUTOMAKE

AC_C_INLINE

AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

genconf.sh 内容:

libtoolize
aclocal -I m4
autoconf
automake --add-missing

全文完。
回复

使用道具 举报

发表于 2013-8-6 13:22 | 显示全部楼层 来自: 中国江苏南通
不加入任何混淆的PYD不如直接给PY
回复

使用道具 举报

发表于 2013-8-11 21:14 | 显示全部楼层 来自: 中国江苏无锡
tianwai 发表于 2013-4-2 12:27
tribon 并不支持.net 类型的DLL,楼主估计是借用相应软件生成了.NET的DLL,建议升级至AM,在调用.NET的DLL

不懂就不要瞎说。
回复

使用道具 举报

发表于 2013-8-11 21:18 | 显示全部楼层 来自: 中国江苏无锡
tianwai 发表于 2013-4-5 22:06
DLL对于OD来说,没有任何秘密的,你懂的。。。。

你真的懂吗?
回复

使用道具 举报

发表于 2013-8-12 10:57 | 显示全部楼层 来自: 中国江苏南通
hello123 发表于 2013-8-11 21:18
你真的懂吗?

我是真的不懂
回复

使用道具 举报

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

本版积分规则

小黑屋|标签|免责声明|龙船社区

GMT+8, 2024-5-8 10:00

Powered by Imarine

Copyright © 2006, 龙船社区

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