免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3773 | 回复: 0
打印 上一主题 下一主题

用Python调用一个DLL和用VC调用有什么不同么 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-10 11:38 |只看该作者 |倒序浏览
请问我用Python调用一个DLL和用VC调用有什么不同么?我这里用Py调用和VC得到的返回值不同,因为要调用的DLL内部有许多文件操作,VC
调用成功,返回0,Py调用得到的是文件无效返回值1(没有DLL 的代码,只有简单的接口说明,Py脚本和VC的DLL放在同一个目录下执行,完全可
重现)。这个失败让我感觉似乎Py的环境和VC的调用环境有些微的不同,但是又不知道是哪里出了问题,如果谁了解的话,请帮助一下,谢谢。

我后来做了一个中间层DLL,在里面显示参数、当前路径什么的,发现都是正确的,但是那个第三天的DLL就是不工作
(因VC可以调用成功,因此第三方DLL提供者认为接口本身没有问题)

附:
要调用的那个接口DLL的定义:
__declspec(dllexport) DWORD ImportFile(const char *lpszName, PC_PARAM pParam);

试验的中间层DLL(也可以不用这个,但是结果是一样的,只要Py调就是返回失败)
extern "C" unsigned long CreateF(const char *lpszName        ,                                                          PC_PARAM pParam)   
{

        DWORD dwErrno=0;
        char Name[]="win";

        PC_PARAM para;

        dwErrno=ImportFile(Name,NULL);
        printf("%d, dwErrno=%d\r\n", sizeof(para), dwErrno);

        return dwErrno;
}

Python的调用(这里调用的是中间层的那个DLL,直接调用结果是一样的)
from ctypes import*
strName = c_char_p("win")
cdll.LoadLibrary('interface.dll');
nRet = cdll.interface.CreateF(strName ,  None);

VC的调用exe程序是这样的:
        DWORD dwErrno=0;
        char strName[]="win";

        dwErrno=ImportFile(strName,NULL);
        printf("%d, %d", sizeof(para), dwErrno);
VC调用ImportFile接口,返回值为0,发现文件正确产生

Python直接调用ImportFile接口或者调用CreateF中间层接口,返回值为1,发现文件没有产生。

[ 本帖最后由 ffb 于 2007-10-10 11:43 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP