2012-12-27 80 views
0

在Win7上使用Python 2.6和ctypes我試圖在COM DLL中調用函數但沒有成功。
這是我正在做的一個代碼片段。Win7 Python 2.6使用ctypes我不能調用COM DLL中的函數

import ctypes 
from ctypes import * 
h_func = c_int(0); 
h_c = c_int(0); 
h_text = ctypes.create_string_buffer(32); 
usbDll = ctypes.WinDLL ("c:\\temp\\PwrUSBDll.dll"); 
CheckStatusPowerUSB = usbDll.CheckStatusPowerUSB; 
InitPowerUSB = usbDll.InitPowerUSB; 
# 
#===This is where it all goes down the tubes. 
# 
InitPowerUSB (byref(h_func), byref(h_text), byref(h_c)); 
# 
# I keep getting a WindowsError: exception: access violation writing 0x00000000 
# 
print h_func.value; 
print h_text.value; 
print h_c.value; 

InitPowerUSB需要兩個參數來返回數據並返回一個返回碼。
任何人都可以幫助我。我有這個工作在C#沒有問題。

+0

您似乎傳遞三個參數而不是兩個。除非您向我們展示C頭文件或C#pinvoke,否則我們不知道如何調用此函數。 –

+1

更重要的是,這不是COM。這只是一個普通的DLL調用。 –

回答

1

爲什麼不使用pypowerusb

望着relevant header fileInitPowerUSB只需一個參數,一個指向整數,而你提供三個參數。

嘗試僅使用一個參數調用該函數。

+0

如果該信頭是可信的,則它也是'cdecl'而不是'stdcall' –

+0

根據http://msdn.microsoft.com/en-us/library/z4zxe9k8%28v=vs.80%29.aspx應該使用'__stdcall'。但我不是一個窗戶的傢伙,所以我不知道。 –

+0

鏈接到的頭文件不指定調用約定。缺省值是__cdecl。您在評論中鏈接到的文章是通用的。每個DLL都有自己的選擇。 –