【发布时间】:2010-11-06 11:48:58
【问题描述】:
我想使用 win32com 扩展实现 python com 服务器。 然后从 .NET 中使用服务器。 我使用以下示例来实现 com 服务器,它运行时没有问题,但是当我尝试使用 C# 使用它时,我收到 FileNotFoundException 并显示以下消息“Retrieving the COM class factory for component with CLSID {676E38A6-7FA7-4BFF-9179 -AE959734DEBB} 由于以下错误而失败:8007007e。” .我也发布了 C# 代码。我想知道我是否遗漏了一些我希望得到帮助的东西。
谢谢, 莎拉
#PythonCOMServer.py
import pythoncom
class PythonUtilities:
_public_methods_ = [ 'SplitString' ]
_reg_progid_ = "PythonDemos.Utilities"
# NEVER copy the following ID
# Use"print pythoncom.CreateGuid()" to make a new one.
_reg_clsid_ = pythoncom.CreateGuid()
print _reg_clsid_
def SplitString(self, val, item=None):
import string
if item != None: item = str(item)
return string.split(str(val), item)
# Add code so that when this script is run by
# Python.exe,.it self-registers.
if __name__=='__main__':
print 'Registering Com Server'
import win32com.server.register
win32com.server.register.UseCommandLine(PythonUtilities)
// the C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Type pythonServer;
object pythonObject;
pythonServer = Type.GetTypeFromProgID("PythonDemos.Utilities");
pythonObject = Activator.CreateInstance(pythonServer);
}
}
}
【问题讨论】:
-
注意 python 代码中的警告,不要在每次调用时使用新的 GUID。只创建一次 GUID。
-
您发布的代码是用于注册COM服务器的;您是否还实现(并运行)了实际的服务器?
-
我认为注册服务器意味着它正在运行。你能给我更多的指导吗?谢谢