Loadlibrary MATLAB函数

问题描述 投票:0回答:1

我想将Python代码翻译成MATLAB。 Python代码使用库CTYPES中的de function“cdll.LoadLibrary”。此函数不需要像loadlibrary MATLAB函数这样的标题:

PYTHON代码:

  from ctypes import * 
  myDLL = cdll.LoadLibrary("cdb_w31.dll")

但是当我尝试用MATLAB做的时候,我遇到了几个问题:

MATLAB代码:

  loadlibrary('cdb_w31.dll','myheader.h', 'mfilename', 'myproto',...
      'addheader', 'cdbase',...
      'addheader', 'cdbtypeall',...
      'addheader', 'cdbtypecon',...
      'addheader', 'cdbtypegeo',...
      'addheader', 'cdbtypelfc',...
      'addheader', 'cdbtypemat',...
      'addheader', 'cdbtypesct',...
      'addheader', 'cdbtypesys',...
      'addheader', 'cdbtypeten')

文件“myheader.h”包含以下代码:

  //myheader.h
  #include "cdbase.h"
  #include "cdbtypeall.h"
  #include "cdbtypecon.h"
  #include "cdbtypegeo.h"
  #include "cdbtypelfc.h"
  #include "cdbtypemat.h"
  #include "cdbtypesct.h"
  #include "cdbtypesys.h"
  #include "cdbtypeten.h"

因为DLL库似乎有多个标题,所以我创建了一个包含所有标题的标题。

命令窗口消息如下:

 >> DLL_test
  Warning: Warnings messages were produced while
  parsing.  Check the functions you intend to use
  for correctness.  Warning text can be viewed
  using:
   [notfound,warnings]=loadlibrary(...) 
  > In loadlibrary
    In DLL_test (line 10) 
  Error loading library intermediate output follows.
  The actual error is at the end of this output.
  *********

  Failed to parse type 'union taguMAT { int m_id ; typeCDB_MAT m_mat ; typeCDB_MAT_USER m_mat_user ; typeCDB_MAT_FLUI m_mat_flui ; typeCDB_MAT_CONS m_mat_cons ; typeCDB_MAT_UNDR m_mat_undr ; typeCDB_MAT_FAUL m_mat_faul ; typeCDB_MAT_SWEL m_mat_swel ; typeCDB_MAT_CONC m_mat_conc ; typeCDB_MAT_STEE m_mat_stee ; typeCDB_MAT_TIMB m_mat_timb ; typeCDB_MAT_BRIC m_mat_bric ; typeCDB_MAT_SERV m_mat_serv ; typeCDB_MAT_ULTI m_mat_ulti ; typeCDB_MAT_NONL m_mat_nonl ; typeCDB_MAT_BED m_mat_bed ; typeCDB_MAT_LAY m_mat_lay ; typeCDB_MAT_HYD m_mat_hyd ; typeCDB_MAT_SPE m_mat_spe ; } typeuMAT' original input 'union taguMAT { int m_id ; typeCDB_MAT m_mat ; typeCDB_MAT_USER m_mat_user ; typeCDB_MAT_FLUI m_mat_flui ; typeCDB_MAT_CONS m_mat_cons ; typeCDB_MAT_UNDR m_mat_undr ; typeCDB_MAT_FAUL m_mat_faul ; typeCDB_MAT_SWEL m_mat_swel ; typeCDB_MAT_CONC m_mat_conc ; typeCDB_MAT_STEE m_mat_stee ; typeCDB_MAT_TIMB m_mat_timb ; typeCDB_MAT_BRIC m_mat_bric ; typeCDB_MAT_SERV m_mat_serv ; typeCDB_MAT_ULTI m_mat_ulti ; typeCDB_MAT_NONL m_mat_nonl ; typeCDB_MAT_BED m_mat_bed ; typeCDB_MAT_LAY m_mat_lay ; typeCDB_MAT_HYD m_mat_hyd ; typeCDB_MAT_SPE m_mat_spe ; } typeuMAT'
  Found on line 786 of input from line 719 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypemat.h

  Failed to parse type 'union taguBORE { int m_id ; typeCDB_BORE m_bore ; typeCDB_BORE_LAY m_bore_lay ; typeCDB_BORE_TAB m_bore_tab ; typeCDB_BORE_TAD m_bore_tad ; typeCDB_BORE_BAX m_bore_bax ; typeCDB_BORE_BLA m_bore_bla ; typeCDB_BORE_BAM m_bore_bam ; typeCDB_BORE_DYA m_bore_dya ; typeCDB_BORE_DYL m_bore_dyl ; } typeuBORE' original input 'union taguBORE { int m_id ; typeCDB_BORE m_bore ; typeCDB_BORE_LAY m_bore_lay ; typeCDB_BORE_TAB m_bore_tab ; typeCDB_BORE_TAD m_bore_tad ; typeCDB_BORE_BAX m_bore_bax ; typeCDB_BORE_BLA m_bore_bla ; typeCDB_BORE_BAM m_bore_bam ; typeCDB_BORE_DYA m_bore_dya ; typeCDB_BORE_DYL m_bore_dyl ; } typeuBORE'
  Found on line 801 of input from line 734 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypemat.h

  ...

  Failed to parse type 'union taguQCUT_0 { int m_id ; typeCDB_QCUT_0 m_qcut_0 ; typeCDB_QCUT_NEW m_qcut_new ; typeCDB_QCUT_DIR m_qcut_dir ; typeCDB_QCUT_OUT m_qcut_out ; typeCDB_QCUT_IN m_qcut_in ; typeCDB_QCUT_WAR m_qcut_war ; } typeuQCUT_0' original input 'union taguQCUT_0 { int m_id ; typeCDB_QCUT_0 m_qcut_0 ; typeCDB_QCUT_NEW m_qcut_new ; typeCDB_QCUT_DIR m_qcut_dir ; typeCDB_QCUT_OUT m_qcut_out ; typeCDB_QCUT_IN m_qcut_in ; typeCDB_QCUT_WAR m_qcut_war ; } typeuQCUT_0'
  Found on line 10276 of input from line 5620 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguTEXTILE { int m_id ; typeCDB_TEXTILE m_textile ; } typeuTEXTILE' original input 'union taguTEXTILE { int m_id ; typeCDB_TEXTILE m_textile ; } typeuTEXTILE'
  Found on line 10284 of input from line 5628 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_P { int m_id ; typeCDB_QUAD_P m_quad_p ; } typeuQUAD_P' original input 'union taguQUAD_P { int m_id ; typeCDB_QUAD_P m_quad_p ; } typeuQUAD_P'
  Found on line 10292 of input from line 5636 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_LOA { int m_id ; typeCDB_QUAD_LOA m_quad_loa ; } typeuQUAD_LOA' original input 'union taguQUAD_LOA { int m_id ; typeCDB_QUAD_LOA m_quad_loa ; } typeuQUAD_LOA'
  Found on line 10299 of input from line 5643 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_LPI { int m_id ; typeCDB_QUAD_LPI m_quad_lpi ; typeCDB_QUAD_LLI m_quad_lli ; typeCDB_QUAD_LAI m_quad_lai ; } typeuQUAD_LPI' original input 'union taguQUAD_LPI { int m_id ; typeCDB_QUAD_LPI m_quad_lpi ; typeCDB_QUAD_LLI m_quad_lli ; typeCDB_QUAD_LAI m_quad_lai ; } typeuQUAD_LPI'
  Found on line 10308 of input from line 5652 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_LT { int m_id ; typeCDB_QUAD_LT m_quad_lt ; } typeuQUAD_LT' original input 'union taguQUAD_LT { int m_id ; typeCDB_QUAD_LT m_quad_lt ; } typeuQUAD_LT'
  Found on line 10315 of input from line 5659 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_FOC { int m_id ; typeCDB_QUAD_FOC m_quad_foc ; typeCDB_QUAD_FOR m_quad_for ; } typeuQUAD_FOC' original input 'union taguQUAD_FOC { int m_id ; typeCDB_QUAD_FOC m_quad_foc ; typeCDB_QUAD_FOR m_quad_for ; } typeuQUAD_FOC'
  Found on line 10323 of input from line 5667 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_NFC { int m_id ; typeCDB_QUAD_NFC m_quad_nfc ; typeCDB_QUAD_NFO m_quad_nfo ; } typeuQUAD_NFC' original input 'union taguQUAD_NFC { int m_id ; typeCDB_QUAD_NFC m_quad_nfc ; typeCDB_QUAD_NFO m_quad_nfo ; } typeuQUAD_NFC'
  Found on line 10331 of input from line 5675 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_EFC { int m_id ; typeCDB_QUAD_EFC m_quad_efc ; typeCDB_QUAD_EFO m_quad_efo ; } typeuQUAD_EFC' original input 'union taguQUAD_EFC { int m_id ; typeCDB_QUAD_EFC m_quad_efc ; typeCDB_QUAD_EFO m_quad_efo ; } typeuQUAD_EFC'
  Found on line 10339 of input from line 5683 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_BEC { int m_id ; typeCDB_QUAD_BEC m_quad_bec ; typeCDB_QUAD_BED m_quad_bed ; } typeuQUAD_BEC' original input 'union taguQUAD_BEC { int m_id ; typeCDB_QUAD_BEC m_quad_bec ; typeCDB_QUAD_BED m_quad_bed ; } typeuQUAD_BEC'
  Found on line 10347 of input from line 5691 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_RFX { int m_id ; typeCDB_QUAD_RFX m_quad_rfx ; } typeuQUAD_RFX' original input 'union taguQUAD_RFX { int m_id ; typeCDB_QUAD_RFX m_quad_rfx ; } typeuQUAD_RFX'
  Found on line 10354 of input from line 5698 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_RNC { int m_id ; typeCDB_QUAD_RNC m_quad_rnc ; typeCDB_QUAD_RNO m_quad_rno ; } typeuQUAD_RNC' original input 'union taguQUAD_RNC { int m_id ; typeCDB_QUAD_RNC m_quad_rnc ; typeCDB_QUAD_RNO m_quad_rno ; } typeuQUAD_RNC'
  Found on line 10362 of input from line 5706 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_STC { int m_id ; typeCDB_QUAD_STC m_quad_stc ; typeCDB_QUAD_STP m_quad_stp ; typeCDB_QUAD_STR m_quad_str ; } typeuQUAD_STC' original input 'union taguQUAD_STC { int m_id ; typeCDB_QUAD_STC m_quad_stc ; typeCDB_QUAD_STP m_quad_stp ; typeCDB_QUAD_STR m_quad_str ; } typeuQUAD_STC'
  Found on line 10371 of input from line 5715 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_NSC { int m_id ; typeCDB_QUAD_NSC m_quad_nsc ; typeCDB_QUAD_NST m_quad_nst ; } typeuQUAD_NSC' original input 'union taguQUAD_NSC { int m_id ; typeCDB_QUAD_NSC m_quad_nsc ; typeCDB_QUAD_NST m_quad_nst ; } typeuQUAD_NSC'
  Found on line 10379 of input from line 5723 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_ESC { int m_id ; typeCDB_QUAD_ESC m_quad_esc ; typeCDB_QUAD_EST m_quad_est ; } typeuQUAD_ESC' original input 'union taguQUAD_ESC { int m_id ; typeCDB_QUAD_ESC m_quad_esc ; typeCDB_QUAD_EST m_quad_est ; } typeuQUAD_ESC'
  Found on line 10387 of input from line 5731 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_RLC { int m_id ; typeCDB_QUAD_RLC m_quad_rlc ; typeCDB_QUAD_RLA m_quad_rla ; typeCDB_QUAD_RLB m_quad_rlb ; } typeuQUAD_RLC' original input 'union taguQUAD_RLC { int m_id ; typeCDB_QUAD_RLC m_quad_rlc ; typeCDB_QUAD_RLA m_quad_rla ; typeCDB_QUAD_RLB m_quad_rlb ; } typeuQUAD_RLC'
  Found on line 10396 of input from line 5740 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_SEC { int m_id ; typeCDB_QUAD_SEC m_quad_sec ; typeCDB_QUAD_SEQ m_quad_seq ; typeCDB_QUAD_SER m_quad_ser ; } typeuQUAD_SEC' original input 'union taguQUAD_SEC { int m_id ; typeCDB_QUAD_SEC m_quad_sec ; typeCDB_QUAD_SEQ m_quad_seq ; typeCDB_QUAD_SER m_quad_ser ; } typeuQUAD_SEC'
  Found on line 10405 of input from line 5749 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_RTS { int m_id ; typeCDB_QUAD_RTS m_quad_rts ; } typeuQUAD_RTS' original input 'union taguQUAD_RTS { int m_id ; typeCDB_QUAD_RTS m_quad_rts ; } typeuQUAD_RTS'
  Found on line 10412 of input from line 5756 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_DST { int m_id ; typeCDB_QUAD_DST m_quad_dst ; } typeuQUAD_DST' original input 'union taguQUAD_DST { int m_id ; typeCDB_QUAD_DST m_quad_dst ; } typeuQUAD_DST'
  Found on line 10419 of input from line 5763 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_NDS { int m_id ; typeCDB_QUAD_NDS m_quad_nds ; } typeuQUAD_NDS' original input 'union taguQUAD_NDS { int m_id ; typeCDB_QUAD_NDS m_quad_nds ; } typeuQUAD_NDS'
  Found on line 10426 of input from line 5770 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_RIC { int m_id ; typeCDB_QUAD_RIC m_quad_ric ; typeCDB_QUAD_REI m_quad_rei ; } typeuQUAD_RIC' original input 'union taguQUAD_RIC { int m_id ; typeCDB_QUAD_RIC m_quad_ric ; typeCDB_QUAD_REI m_quad_rei ; } typeuQUAD_RIC'
  Found on line 10434 of input from line 5778 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_NRC { int m_id ; typeCDB_QUAD_NRC m_quad_nrc ; typeCDB_QUAD_NRI m_quad_nri ; } typeuQUAD_NRC' original input 'union taguQUAD_NRC { int m_id ; typeCDB_QUAD_NRC m_quad_nrc ; typeCDB_QUAD_NRI m_quad_nri ; } typeuQUAD_NRC'
  Found on line 10442 of input from line 5786 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_NRP { int m_id ; typeCDB_QUAD_NRP m_quad_nrp ; typeCDB_QUAD_PUN m_quad_pun ; typeCDB_QUAD_PU1 m_quad_pu1 ; } typeuQUAD_NRP' original input 'union taguQUAD_NRP { int m_id ; typeCDB_QUAD_NRP m_quad_nrp ; typeCDB_QUAD_PUN m_quad_pun ; typeCDB_QUAD_PU1 m_quad_pu1 ; } typeuQUAD_NRP'
  Found on line 10451 of input from line 5795 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_RED { int m_id ; typeCDB_QUAD_RED m_quad_red ; typeCDB_QUAD_REL m_quad_rel ; } typeuQUAD_RED' original input 'union taguQUAD_RED { int m_id ; typeCDB_QUAD_RED m_quad_red ; typeCDB_QUAD_REL m_quad_rel ; } typeuQUAD_RED'
  Found on line 10460 of input from line 5804 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_REE { int m_id ; typeCDB_QUAD_REE m_quad_ree ; typeCDB_QUAD_REA m_quad_rea ; typeCDB_QUAD_RER m_quad_rer ; } typeuQUAD_REE' original input 'union taguQUAD_REE { int m_id ; typeCDB_QUAD_REE m_quad_ree ; typeCDB_QUAD_REA m_quad_rea ; typeCDB_QUAD_RER m_quad_rer ; } typeuQUAD_REE'
  Found on line 10469 of input from line 5813 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_RNE { int m_id ; typeCDB_QUAD_RNE m_quad_rne ; } typeuQUAD_RNE' original input 'union taguQUAD_RNE { int m_id ; typeCDB_QUAD_RNE m_quad_rne ; } typeuQUAD_RNE'
  Found on line 10476 of input from line 5820 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_CFD { int m_id ; typeCDB_QUAD_CFD m_quad_cfd ; } typeuQUAD_CFD' original input 'union taguQUAD_CFD { int m_id ; typeCDB_QUAD_CFD m_quad_cfd ; } typeuQUAD_CFD'
  Found on line 10483 of input from line 5827 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguQUAD_TM { int m_id ; typeCDB_QUAD_TM m_quad_tm ; typeCDB_QUAD_TMP m_quad_tmp ; } typeuQUAD_TM' original input 'union taguQUAD_TM { int m_id ; typeCDB_QUAD_TM m_quad_tm ; typeCDB_QUAD_TMP m_quad_tmp ; } typeuQUAD_TM'
  Found on line 10491 of input from line 5835 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC { int m_id ; typeCDB_BRIC m_bric ; } typeuBRIC' original input 'union taguBRIC { int m_id ; typeCDB_BRIC m_bric ; } typeuBRIC'
  Found on line 10499 of input from line 5843 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_SU { int m_id ; typeCDB_BRIC_SU m_bric_su ; typeCDB_BRIC_SUR m_bric_sur ; } typeuBRIC_SU' original input 'union taguBRIC_SU { int m_id ; typeCDB_BRIC_SU m_bric_su ; typeCDB_BRIC_SUR m_bric_sur ; } typeuBRIC_SU'
  Found on line 10508 of input from line 5852 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_RIM { int m_id ; typeCDB_BRIC_RIM m_bric_rim ; } typeuBRIC_RIM' original input 'union taguBRIC_RIM { int m_id ; typeCDB_BRIC_RIM m_bric_rim ; } typeuBRIC_RIM'
  Found on line 10516 of input from line 5860 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_P { int m_id ; typeCDB_BRIC_P m_bric_p ; } typeuBRIC_P' original input 'union taguBRIC_P { int m_id ; typeCDB_BRIC_P m_bric_p ; } typeuBRIC_P'
  Found on line 10524 of input from line 5868 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_LOA { int m_id ; typeCDB_BRIC_LOA m_bric_loa ; } typeuBRIC_LOA' original input 'union taguBRIC_LOA { int m_id ; typeCDB_BRIC_LOA m_bric_loa ; } typeuBRIC_LOA'
  Found on line 10531 of input from line 5875 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_STP { int m_id ; typeCDB_BRIC_STP m_bric_stp ; typeCDB_BRIC_STC m_bric_stc ; typeCDB_BRIC_STR m_bric_str ; } typeuBRIC_STP' original input 'union taguBRIC_STP { int m_id ; typeCDB_BRIC_STP m_bric_stp ; typeCDB_BRIC_STC m_bric_stc ; typeCDB_BRIC_STR m_bric_str ; } typeuBRIC_STP'
  Found on line 10540 of input from line 5884 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_NSC { int m_id ; typeCDB_BRIC_NSC m_bric_nsc ; typeCDB_BRIC_NST m_bric_nst ; } typeuBRIC_NSC' original input 'union taguBRIC_NSC { int m_id ; typeCDB_BRIC_NSC m_bric_nsc ; typeCDB_BRIC_NST m_bric_nst ; } typeuBRIC_NSC'
  Found on line 10548 of input from line 5892 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_ESC { int m_id ; typeCDB_BRIC_ESC m_bric_esc ; typeCDB_BRIC_EST m_bric_est ; } typeuBRIC_ESC' original input 'union taguBRIC_ESC { int m_id ; typeCDB_BRIC_ESC m_bric_esc ; typeCDB_BRIC_EST m_bric_est ; } typeuBRIC_ESC'
  Found on line 10556 of input from line 5900 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_REI { int m_id ; typeCDB_BRIC_REI m_bric_rei ; } typeuBRIC_REI' original input 'union taguBRIC_REI { int m_id ; typeCDB_BRIC_REI m_bric_rei ; } typeuBRIC_REI'
  Found on line 10563 of input from line 5907 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_NRI { int m_id ; typeCDB_BRIC_NRI m_bric_nri ; } typeuBRIC_NRI' original input 'union taguBRIC_NRI { int m_id ; typeCDB_BRIC_NRI m_bric_nri ; } typeuBRIC_NRI'
  Found on line 10570 of input from line 5914 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_CFD { int m_id ; typeCDB_BRIC_CFD m_bric_cfd ; } typeuBRIC_CFD' original input 'union taguBRIC_CFD { int m_id ; typeCDB_BRIC_CFD m_bric_cfd ; } typeuBRIC_CFD'
  Found on line 10577 of input from line 5921 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguBRIC_TM { int m_id ; typeCDB_BRIC_TM m_bric_tm ; typeCDB_BRIC_TMP m_bric_tmp ; } typeuBRIC_TM' original input 'union taguBRIC_TM { int m_id ; typeCDB_BRIC_TM m_bric_tm ; typeCDB_BRIC_TMP m_bric_tmp ; } typeuBRIC_TM'
  Found on line 10585 of input from line 5929 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguHASE_PIH { int m_id ; typeCDB_HASE_PIH m_hase_pih ; typeCDB_HASE_PIL m_hase_pil ; } typeuHASE_PIH' original input 'union taguHASE_PIH { int m_id ; typeCDB_HASE_PIH m_hase_pih ; typeCDB_HASE_PIL m_hase_pil ; } typeuHASE_PIH'
  Found on line 10593 of input from line 5937 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguSEG_DEF { int m_id ; typeCDB_SEG_DEF m_seg_def ; } typeuSEG_DEF' original input 'union taguSEG_DEF { int m_id ; typeCDB_SEG_DEF m_seg_def ; } typeuSEG_DEF'
  Found on line 10601 of input from line 5945 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypesys.h

  Failed to parse type 'union taguCON_0 { int m_id ; typeCDB_CON_0 m_con_0 ; typeCDB_CON_BOL m_con_bol ; typeCDB_CON_WEL m_con_wel ; typeCDB_CON_CLE m_con_cle ; typeCDB_CON_MEM m_con_mem ; typeCDB_CON_END m_con_end ; typeCDB_CON_PIN m_con_pin ; typeCDB_CON_PLT m_con_plt ; } typeuCON_0' original input 'union taguCON_0 { int m_id ; typeCDB_CON_0 m_con_0 ; typeCDB_CON_BOL m_con_bol ; typeCDB_CON_WEL m_con_wel ; typeCDB_CON_CLE m_con_cle ; typeCDB_CON_MEM m_con_mem ; typeCDB_CON_END m_con_end ; typeCDB_CON_PIN m_con_pin ; typeCDB_CON_PLT m_con_plt ; } typeuCON_0'
  Found on line 10743 of input from line 155 of file C:\\Users\\supermicro\\Desktop\\JOSEMANUEL\\MATLAB_SOFiSTiK\\cdbtypecon.h
  *********
  Error using loadlibrary
  Building cdb_w31_thunk_pcwin64 failed.  Compiler
  output is:
  C:\ProgramData\MATLAB\SupportPackages\R2017b\3P.instrset\mingw_w64.instrset\bin\gcc
  -I"C:\Program
  Files\MATLAB\R2017b\extern\include" -fexceptions
  -fno-omit-frame-pointer
  -I"C:\Users\supermicro\Desktop\JOSEMANUEL\MATLAB_SOFiSTiK"
  -I"C:\Users\supermicro\Desktop\JOSEMANUEL\MATLAB_SOFiSTiK"
  "cdb_w31_thunk_pcwin64.c" -o
  "cdb_w31_thunk_pcwin64.dll" -shared
  In file included from myheader2.h:2:0,
                   from
                   cdb_w31_thunk_pcwin64.c:27:
  cdbase.h:290:11: error: unknown type name
  'cd_error_t'
   SOF_C_TYP cd_error_t sof_cdb_lock (int kwh, int
   kwl);
             ^
  cdbase.h:292:11: error: unknown type name
  'cd_error_t'
   SOF_C_TYP cd_error_t
   sof_cdb_readlock_acquire(int index, int kwh,
   int kwl);
             ^
  cdbase.h:293:11: error: unknown type name
  'cd_error_t'
   SOF_C_TYP cd_error_t
   sof_cdb_readlock_release(int index, int kwh,
   int kwl);
             ^
  cdb_w31_thunk_pcwin64.c:201:17: error: unknown
  type name 'cd_error_t'
   EXPORT_EXTERN_C cd_error_t
   cd_error_tint32int32Thunk(void fcn(),const char
   *callstack,int stacksize)
                   ^
  cdb_w31_thunk_pcwin64.c: In function
  'cd_error_tint32int32Thunk':
  cdb_w31_thunk_pcwin64.c:209:11: warning:
  implicit declaration of function 'cd_error_t'
  [-Wimplicit-function-declaration]
    return ((cd_error_t (*)(int32_T , int32_T
    ))fcn)(p0 , p1);
             ^
  cdb_w31_thunk_pcwin64.c:209:24: error: expected
  expression before ')' token
    return ((cd_error_t (*)(int32_T , int32_T
    ))fcn)(p0 , p1);
                          ^
  cdb_w31_thunk_pcwin64.c:209:46: error: expected
  ')' before 'fcn'
    return ((cd_error_t (*)(int32_T , int32_T
    ))fcn)(p0 , p1);
                                                ^
  cdb_w31_thunk_pcwin64.c: At top level:
  cdb_w31_thunk_pcwin64.c:213:17: error: unknown
  type name 'cd_error_t'
   EXPORT_EXTERN_C cd_error_t
   cd_error_tint32int32int32Thunk(void fcn(),const
   char *callstack,int stacksize)
                   ^
  cdb_w31_thunk_pcwin64.c: In function
  'cd_error_tint32int32int32Thunk':
  cdb_w31_thunk_pcwin64.c:224:24: error: expected
  expression before ')' token
    return ((cd_error_t (*)(int32_T , int32_T ,
    int32_T ))fcn)(p0 , p1 , p2);
                          ^
  cdb_w31_thunk_pcwin64.c:224:56: error: expected
  ')' before 'fcn'
    return ((cd_error_t (*)(int32_T , int32_T ,
    int32_T ))fcn)(p0 , p1 , p2);
                                                          ^


  Error in DLL_test (line 10)
      loadlibrary('cdb_w31.dll','myheader2.h',
      'mfilename', 'myproto',...

读取注释的用户,似乎是使用C ++的MATLAB异常(https://es.mathworks.com/help/matlab/matlab_external/limitations-to-shared-library-support.html)的联合问题。我对C ++语言知之甚少。

我尝试编辑头文件,如下例所示。替换其中一个标题的这段代码:

#define LC_ACT_KWH 14
typedef union taguLC_ACT {   /* 14/IDT */
int m_id;
typeCDB_LC_ACT m_lc_act;
} typeuLC_ACT;

为了这:

#define LC_ACT_KWH 14
typedef struct taguLC_ACT {   /* 14/IDT */
int m_id;
typeCDB_LC_ACT m_lc_act;
} typeuLC_ACT;

但它不起作用......

python matlab dll ctypes loadlibrary
1个回答
1
投票

从错误消息来看,看起来MATLAB函数与union效果不佳,不是吗?

根据the documentation,工会不受支持:

工会不受支持。作为一种解决方法,修改取出union声明的源代码并将其替换为最大的替代声明。然后,要解释结果,请根据需要编写MATLAB代码。

我建议您查看链接的文档页面,它提供了此变通方法的示例。

© www.soinside.com 2019 - 2024. All rights reserved.