Я пытаюсь вызвать некоторые функции из файла IDL.Вот мой файл IDL:
// This file will be processed by the MIDL tool to
// produce the type library (File.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(43EA61FC-C17E-429B-8AAD-B71CC2F53098),
dual,
nonextensible,
helpstring("IFile_RemoteInterface Interface"),
pointer_default(unique)
]
interface IFile_RemoteInterface : IDispatch{
[id(5), helpstring("method GetState")] HRESULT GetState(BSTR sequencename, [out] LONG* sequencestate);
};
[
uuid(1F19FE19-8626-4ADC-9787-077CD9D06563),
version(2.0),
helpstring("File Remote Interface 2.0")
]
library FileLib
{
importlib("stdole2.tlb");
[
uuid(E0FDA055-B882-4026-A3D9-2EC863FCDFB9),
helpstring("File_RemoteInterface Class")
]
coclass File_RemoteInterface
{
[default] interface IFile_RemoteInterface;
};
};
Я сгенерировал из него файл TLB с помощью компилятора MIDL и зарегистрировал COM-сервер, используя "python fileBelow.py / regserver" (исправьте меня, если я 'неправильно, я новичок в программировании на Python):
import comtypes
import comtypes.server.localserver
from comtypes.client import GetModule
# generate wrapper code for the type library, this needs
# to be done only once (but also each time the IDL file changes)
GetModule("File.tlb")
from comtypes.gen.FileLib import File_RemoteInterface
class FileImpl(File_RemoteInterface):
# registry entries
_reg_threading_ = "Both"
_reg_progid_ = "File.Object.1"
_reg_novers_progid_ = "File.Object"
_reg_desc_ = "Python engine for File"
_reg_clsctx_ = comtypes.CLSCTX_INPROC_SERVER | comtypes.CLSCTX_LOCAL_SERVER
_regcls_ = comtypes.server.localserver.REGCLS_MULTIPLEUSE
def GetState(self,a,b):
return a // i don't know what exactly should i write here
if __name__ == "__main__":
from comtypes.server.register import UseCommandLine
UseCommandLine(FileImpl)
И я пытаюсь вызвать метод GetState:
from comtypes.client import CreateObject
from ctypes import *
cale = "some_path"
x = CreateObject("File.Object")
x.GetState(cale,b)
Но я продолжаю получать ту же ошибку:Ошибка типа: вызов принимает ровно 2 аргумента (3 дано).Я читал об этой ошибке, и это что-то с параметром self, но я добавил параметр в def.
Если у вас есть идеи, пожалуйста, дайте мне знать!