regenesis90 / vissim_win32com

Python win32com을 사용한 VISSIM 7 - 64bit 자동화 코드. VISSIM-COM매뉴얼 재구성, 각종 데이터 추출, 반복문 적용 등
1 stars 0 forks source link

Vissim = com.Dispatch("VISSIM.Vissim.2024")이 작동되지 않습니다. #1

Open H-Jihyeon opened 3 weeks ago

H-Jihyeon commented 3 weeks ago

Vissim = com.Dispatch("VISSIM.Vissim.2024") 이 코드가 실행되어야 VISSIM을 python에서 실행할 수 있는데, 레지스트리 편집기에서 확인해봤을 때 COM 서버 등록은 제대로 되어 있는 것 같은데, 자꾸 에러가 뜹니다. 혹시 이거 해결하는 방법 아실까요?

Vissim = com.Dispatch('VISSIM.Vissim240')

---------------------------------------------------------------------------
com_error                                 Traceback (most recent call last)
File ~\AppData\Roaming\Python\Python313\site-packages\win32com\client\dynamic.py:80, in _GetGoodDispatch(IDispatch, clsctx)
     79 try:
---> 80     IDispatch = pythoncom.connect(IDispatch)
     81 except pythoncom.ole_error:

com_error: (-2147221005, '잘못된 클래스 문자열입니다.', None, None)

During handling of the above exception, another exception occurred:

com_error                                 Traceback (most recent call last)
Cell In[3], line 1
----> 1 Vissim = com.Dispatch('VISSIM.Vissim240')

File ~\AppData\Roaming\Python\Python313\site-packages\win32com\client\__init__.py:114, in Dispatch(dispatch, userName, resultCLSID, typeinfo, clsctx)
    106 def Dispatch(
    107     dispatch,
    108     userName=None,
   (...)
    111     clsctx=pythoncom.CLSCTX_SERVER,
    112 ):
    113     """Creates a Dispatch based COM object."""
--> 114     dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx)
    115     return __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, clsctx=clsctx)
...
     85 else:
     86     # may already be a wrapped class.
     87     IDispatch = getattr(IDispatch, "_oleobj_", IDispatch)

com_error: (-2147221005, '잘못된 클래스 문자열입니다.', None, None)
regenesis90 commented 3 weeks ago

안녕하세요. 저의 생각으로는 VISSIM 버전에 따른 차이로 인해 발생하는 문제로 보입니다. 저는 VISSIM 7.0을 사용하고 있고, 해당 버전은 아래의 코드로 작동합니다

vis = com.gencache.EnsureDispatch('Vissim.Vissim.700') Filename = os.path.abspath(os.path.join(access_path, vissim_file + '.inpx')) flag_read_additionally = False vis.LoadNet(Filename, flag_read_additionally)