Skip to content

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模型中,组件实例可以被多个线程同时访问,因此可以实现更高的并发性。

然而这也带来了线程同步的问题,组件需要确保对共享资源的访问是线程安全的。

离火AI插件官方网址 https://www.lihuochajian.com