带有 VBA 延迟投标的 Python COM 服务器 + 跳过获胜注册(无管理员权限)

Buc*_*son 1 python com vba winreg

我正在尝试import在 VBA 中输入 Python 代码。

下面的代码有效,但需要管理员权限。有没有办法绕过 win register 需求(假设我只是没有管理员权限)但保持“延迟投标”行为(每次我编译新东西时都不想工具>>参考)

class ProofOfConcept(object):
    def __init__(self):
        self.output = []

    def GetData(self):
        with open('C:\Users\MyPath\Documents\COMs\SourceData.txt') as FileObj:
            for line in FileObj:
                self.output.append(line)
            return self.output

class COMProofOfConcept(object):
    _reg_clsid_ = "{D25A5B2A-9544-4C07-8077-DB3611BE63E7}"
    _reg_progid_= 'RiskTools.ProofOfConcept'
    _public_methods_ = ['GetData']

def __init__(self):
    self.__ProofOfConcept = ProofOfConcept()

def GetData(self):
    return self.__ProofOfConcept.GetData()

if __name__=='__main__':
    print "Registering COM server..."
    import win32com.server.register
    win32com.server.register.UseCommandLine(COMProofOfConcept)
Run Code Online (Sandbox Code Playgroud)

调用它的 VBA 代码:

Sub TestProofOfConcept()
    Set PoF = CreateObject("RiskTools.ProofOfConcept")
    x = PoF.GetData()
    MsgBox x(0)
End Sub
Run Code Online (Sandbox Code Playgroud)

Com*_*ern 5

简而言之,没有。VBA 运行时在幕后基本上使用CoGetClassObject COM API - 该CreateObject()函数本质上只是它的一个薄包装器(它首先调用CLSIDFromString以从参数中定位 CLSID)。这两个函数都需要注册该类。