Appearance
SetDllPathW
函数简介
SetDllPathW
函数用于免注册调用COM组件,成功后可直接创建COM对象而无需将DLL注册到系统。
提示:仅需在程序创建时运行一次
函数原型
cpp
int SetDllPathW(path, mode);
参数定义
path
: 插件dll所在绝对路径。
mode
: 线程模型。
- 0: STA单线程模型
- 1: MTA多线程模型
返回值
1: 成功
0: 失败
python免注册调用方法
python
import ctypes
import os
import win32com.client
# 获取插件dll绝对路径
dll_path = os.getcwd() + '\\lh.dll'
# 加载dll
s = ctypes.windll.LoadLibrary(dll_path)
# 调用dll导出函数SetDllPathW
temp_ret = s.SetDllPathW(dll_path, 1)
print('免注册调用COM组件', temp_ret)
# 创建COM对象
lh = win32com.client.Dispatch("lh.lhsoft")
# 调用COM接口Ver
print('插件版本号为:', lh.Ver())
线程模型
STA(Single Threaded Apartment)单线程模型:
STA是一种线程模型,主要应用于组件对象模型(COM)中,特别是在Microsoft的COM中。
在STA模型中,每个COM组件实例都在一个单独的线程内运行,这个线程负责处理该组件的所有调用。
STA模型简化了线程管理,因为组件不需要处理线程同步问题,但是它限制了并发性,因为每个组件实例一次只能处理一个调用。
MTA(Multi Threaded Apartment)多线程模型:
MTA是另一种COM线程模型,允许COM组件在多个线程中同时运行。
在MTA模型中,组件实例可以被多个线程同时访问,因此可以实现更高的并发性。
然而这也带来了线程同步的问题,组件需要确保对共享资源的访问是线程安全的。