python调用dll出错
------**求教各路大神!!!**------Python调用用C++写的dll,这个dll有调用另一个dll,设为B.dll,这个B.dll中封装了
C#,结果在运行python时出现错误:
【OSError: Windows Error 0x%X】
python代码如下:import ctypes, os
from ctypes import *
CUR_PATH = os.path.dirname(__file__)
devGenDll = ctypes.WinDLL(os.path.join(CUR_PATH, "RF_MES.dll"))
devGenDll.InitWS(ctypes.c_char_p(b'www.xxxx.nett'))
deviceID = devGenDll.GetDeviceID("11", "7")
print(deviceID)RF_MES.dll中主要代码如下:#include "stdafx.h"
#include "WSDataTransCpp.h"
#include <stdlib.h>
#include <stdio.h>
#define SUCCESS 1
extern "C"{
CWSDataTransCpp* wsDataTrans;
__declspec(dllexport)void __stdcall InitWS(char* serverIP)
{
printf("InitWS");
wsDataTrans = new CWSDataTransCpp(serverIP);
}
__declspec(dllexport)char* __stdcall GetDeviceID(char* lineNo, char* stationNo)
{
if(wsDataTrans && wsDataTrans->ConnectCheck())
return wsDataTrans->ObtainDeviceID(lineNo, stationNo);
//printf("GetDeviceID");
return NULL;
}
__declspec(dllexport)int __stdcall UploadResult(char* lineNo, char* stationNo, char* deviceID, char* result)
{
return SUCCESS;
}
} 在线等啊!!求赐教! 回复 1# wafer_lu
(-532462766)dec=(E0434352)hex,查Windows错误代码可以知道,这个应当是.NET的问题。
建议你先看下你的C++调用C#的结果是不是正常吧。
这个应当和python没有关系。 本帖最后由 wafer_lu 于 2014-08-25 11:14 编辑
icymirror 发表于 2014-08-22 10:37 static/image/common/back.gif
回复 1# wafer_lu
(-532462766)dec=(E0434352)hex,查Windows错误代码可以知道,这个应当是.NET的问题。
...
我用c写个应用调用这个dll没问题,在python上就有问题。
不知道是不是python调用封装C#的dll有什么特别的地方没? 有个问题,刚刚发现,你是在用ctypes,这个是和native library交互的。
也就是说:使用这个,python调用c接口没有问题,但是.net的dll不是ctypes可以交互的library。这可能是问题所在。
你试下在python里面有没有可能直接调用你的c的库文件。应当是可以的。
(因为.NET的二进制是给.net的平台用的二进制格式,不是那种传统的c的cll,应当是这里的格式问题。) 或者,你也可以通过使用IronPython来调用C#的Library(.dll)文件。 回复 6# icymirror
IronPython 直接调用C# 的dll?
但我的调用关系是这样的:python->A.dll(c++)->B.dll(C++)->C.dll(C#)
B和C都是第三方的。A是我自己封装的。
运行python脚本时会提示无法加载组件C.dll。 问题终于解决了。。。
需要把C.dll放到python.exe的目录下(不是脚本目录)才能运行成功。
谢谢 @icymirror 的回复。
页:
[1]