悬赏至少 50 元,求帮忙 C++调用 dll 的方式转成 Python

2018-07-25 17:50:53 +08:00
 iMath
主要是想通过 Python 使用 WCaptureX.dll 里面的函数,涉及到的 dll 可以到这个软件的安装目录获取
https://wordweb.info/free/
这里提供了 C++调用 dll 的方法
https://sites.google.com/a/deskperience.com/wordcapturexdoc/deployment/using-native-dlls---no-com
另外的一些相关文档
函数文档 https://sites.google.com/a/deskperience.com/wordcapturexdoc/wcapturex/wcapturex-interface/capture-method
例子 https://sites.google.com/a/deskperience.com/wordcapturexdoc/wcapturex/wcapturex-interface/capture-method/visual-c

是否有高手愿意帮忙把这个方法转成 Python 的,指导下我如何使用?为了表示诚意,我愿意出至少 50 元,大家先别嫌少,如果确实能搞定,我愿意再加点,谢谢各位!

我折腾出这种来,貌似也还是不知道怎么用
from ctypes import *
# help(cdll.WCaptureX.CreateCOMObject)
print(cdll.WCaptureX.CreateCOMObject)
7419 次点击
所在节点    Python
70 条回复
prolic
2018-07-25 20:41:04 +08:00
要是标题没悬赏下面回复就是“课后作业自己做”,“知识付费”乱七八糟的了,合着 v2 一群外包接单的
xuegj1010
2018-07-25 20:53:15 +08:00
技术无价,你这 50 块钱是在侮辱各位大佬。。。
liuminghao233
2018-07-25 21:12:52 +08:00
我觉得搞计算机的
花钱让别人帮忙写自己的 project
是一种侮辱自己的行为
yankebupt
2018-07-25 21:19:05 +08:00
FanWell 正解...
刚想说为啥那么多 wrapper 不用,看了一眼链接发现 COM 的...
微软亲自挖坑咱也没啥可说的...
17 楼那个 stackoverflow 最高票数 ctype 答案有可能不能用,但是楼层里 win32com 那个可能可以用...
agee
2018-07-25 21:20:13 +08:00
貌似问题是没错,错在了提钱,还提个 50 块,哈哈
iMath
2018-07-25 21:49:12 +08:00
@FanWall @yankebupt 谢谢两位!
我按文档里的注册了 dll
https://sites.google.com/a/deskperience.com/wordcapturexdoc/wcapturex/register-wcapturex
我的命令
C:\Users\i>regsvr32 "C:\Program Files\WordWeb\WCaptureX.dll"
然后我的代码
from win32com.client import Dispatch
zk = Dispatch("WCaptureX")
估计也不对,出现如下异常
Traceback (most recent call last):
File "C:\Users\i\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py", line 89, in _GetGoodDispatch
IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\BaiduYunDownload\编程\Python\Win32COM.py", line 3, in <module>
zk = Dispatch("WCaptureXLib")
File "C:\Users\i\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "C:\Users\i\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py", line 114, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:\Users\i\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
[Finished in 1.2s]
ysc3839
2018-07-25 21:56:03 +08:00
我可以免费帮你试试。
要自己研究的话,找 C 语言调用 COM 的代码。
个人理解 COM 接口本质是一个记录函数指针的 struct,取到函数指针后 call 就行了。
iMath
2018-07-25 22:02:50 +08:00
@ysc3839 多谢相助!在下对 win32 编程基本没什么认识,希望在你的指引下让我这小白上道~
FanWall
2018-07-25 22:07:37 +08:00
@iMath #26

名称参数大概写错了,可以借助你可以跑通的语言或者工具查看一下

https://technet.microsoft.com/en-us/library/d0kh9f4c(fr-fr).aspx

你也可以用 win32api 调用 CreateCOMObject,那就是 #27 的方案,第一次写麻烦点,不过对加深理解非常有帮助。
ysc3839
2018-07-25 22:10:06 +08:00
@iMath 另外能否提供一下示例代码?
iMath
2018-07-25 22:26:48 +08:00
ysc3839
2018-07-25 22:41:25 +08:00
@iMath 要直接运行就能使用的代码。
iMath
2018-07-25 22:45:51 +08:00
@ysc3839 谢谢!
这里有各种语言的 demo
https://github.com/yanivyhc/WordCaptureSamples
iMath
2018-07-25 22:50:07 +08:00
通过 oleview.exe 找到了这些内容,接下来怎么做也还要等摸索
![
]( )
ysc3839
2018-07-25 23:51:49 +08:00
@iMath
IDispatch 是一个提供了动态特性的 COM 接口,可以实现不固定的函数。一般来说一些较高级的语言会封装这个接口,如 VB C# Delphi,#26 的代码也是使用这个接口。
而 C/C++ 一般不会使用这个接口,因为在没有封装的情况下使用起来较为麻烦。
ysc3839
2018-07-26 04:51:29 +08:00
最终选用了 comtypes https://github.com/enthought/comtypes 这个模块。它同时支持一般的 COM 接口以及 IDispatch,且仅依赖内置的 ctypes 模块。
Leigg
2018-07-26 08:38:28 +08:00
要么你别提钱。
iMath
2018-07-26 09:06:33 +08:00
@ysc3839 我误打误撞地似乎找到了可以用的方式,如下
from win32com.client import Dispatch
WCaptureX = Dispatch("{8F267988-0CA4-418C-8F94-B4BC5862B390}")
print(WCaptureX.GetCursorInfo(None) )

在我的电脑上,CLSID 是{8F267988-0CA4-418C-8F94-B4BC5862B390},不知道在别的机器上 CLSID 会不会变?
ala2008
2018-07-26 09:28:41 +08:00
或者可以趁此学一下 c++?。。
iMath
2018-07-26 09:32:32 +08:00
谈钱伤感情,我错了,各位!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/474117

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX