【问题标题】:Loading a .dll in Matlab causes 'type not found' problems在 Matlab 中加载 .dll 会导致“找不到类型”问题
【发布时间】:2011-12-02 07:11:09
【问题描述】:

我一直希望在 Matlab 中使用 [这个漂亮的 C++ dll][1],因为我有一些现有的 Matlab 东西,我认为这些东西可以从这个库的功能中受益。但是,每当我运行此命令来加载库时:

loadlibrary('d3d9Callback.lib','d3d9Callback.h')

我收到大量关于 dll 中使用的类型存在的警告,以及大量语法错误,显然是由未知类型引起的。这是警告/错误的开始:

   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 at 360
Error loading library intermediate output follows.
The actual error is at the end of this output.
*********

Type 'intCONSTDWORDPtr' was not found.  Defaulting to type voidPtr.

Found on line 29 of input from line 28 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 29 of input from line 28 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTDWORDPtr' was not found.  Defaulting to type voidPtr.

Found on line 30 of input from line 29 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 30 of input from line 29 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DSURFACE_DESCPtr' was not found.  Defaulting to type voidPtr.

Found on line 35 of input from line 34 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'BitmapPtr' was not found.  Defaulting to type voidPtr.

Found on line 35 of input from line 34 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 35 of input from line 34 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'BufferLockDataPtr' was not found.  Defaulting to type voidPtr.

Found on line 36 of input from line 35 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DVERTEXBUFFER_DESCPtr' was not found.  Defaulting to type voidPtr.

Found on line 36 of input from line 35 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'BufferLockDataPtr' was not found.  Defaulting to type voidPtr.

Found on line 37 of input from line 36 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DINDEXBUFFER_DESCPtr' was not found.  Defaulting to type voidPtr.

Found on line 37 of input from line 36 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 39 of input from line 38 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLEPtr' was not found.  Defaulting to type voidPtr.

Found on line 44 of input from line 43 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTD3DVIEWPORT9Ptr' was not found.  Defaulting to type voidPtr.

Found on line 46 of input from line 45 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DTRANSFORMSTATETYPE' was not found.  Defaulting to type error.

Found on line 47 of input from line 46 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTD3DMATRIXPtr' was not found.  Defaulting to type voidPtr.

Found on line 47 of input from line 46 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DVERTEXELEMENT9Ptr' was not found.  Defaulting to type voidPtr.

Found on line 49 of input from line 48 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 51 of input from line 50 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTD3DLIGHT9Ptr' was not found.  Defaulting to type voidPtr.

Found on line 54 of input from line 53 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'BOOL' was not found.  Defaulting to type error.

Found on line 55 of input from line 54 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTD3DMATERIAL9Ptr' was not found.  Defaulting to type voidPtr.

Found on line 57 of input from line 56 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DRENDERSTATETYPE' was not found.  Defaulting to type error.

Found on line 59 of input from line 58 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DTEXTURESTAGESTATETYPE' was not found.  Defaulting to type error.

Found on line 60 of input from line 59 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 62 of input from line 61 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 64 of input from line 63 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 65 of input from line 64 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTBOOLPtr' was not found.  Defaulting to type voidPtr.

Found on line 67 of input from line 66 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTfloatPtr' was not found.  Defaulting to type voidPtr.

Found on line 68 of input from line 67 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTUINTPtr' was not found.  Defaulting to type voidPtr.

Found on line 69 of input from line 68 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTBOOLPtr' was not found.  Defaulting to type voidPtr.

Found on line 71 of input from line 70 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTfloatPtr' was not found.  Defaulting to type voidPtr.

Found on line 72 of input from line 71 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTUINTPtr' was not found.  Defaulting to type voidPtr.

Found on line 73 of input from line 72 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'HANDLE' was not found.  Defaulting to type error.

Found on line 75 of input from line 74 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DPRIMITIVETYPE' was not found.  Defaulting to type error.

Found on line 80 of input from line 79 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DPRIMITIVETYPE' was not found.  Defaulting to type error.

Found on line 81 of input from line 80 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DPRIMITIVETYPE' was not found.  Defaulting to type error.

Found on line 82 of input from line 81 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'INT' was not found.  Defaulting to type error.

Found on line 82 of input from line 81 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DPRIMITIVETYPE' was not found.  Defaulting to type error.

Found on line 83 of input from line 82 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTvoidPtr' was not found.  Defaulting to type voidPtr.

Found on line 83 of input from line 82 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DPRIMITIVETYPE' was not found.  Defaulting to type error.

Found on line 84 of input from line 83 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTvoidPtr' was not found.  Defaulting to type voidPtr.

Found on line 84 of input from line 83 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DFORMAT' was not found.  Defaulting to type error.

Found on line 84 of input from line 83 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTvoidPtr' was not found.  Defaulting to type voidPtr.

Found on line 84 of input from line 83 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTRECTPtr' was not found.  Defaulting to type voidPtr.

Found on line 89 of input from line 88 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTRECTPtr' was not found.  Defaulting to type voidPtr.

Found on line 89 of input from line 88 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'intCONSTD3DRECTPtr' was not found.  Defaulting to type voidPtr.

Found on line 90 of input from line 89 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Type 'D3DCOLOR' was not found.  Defaulting to type error.

Found on line 90 of input from line 89 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h

Failed to parse type 'D3D9Base :: LPDIRECT3DDEVICE9 Device' original input 'D3D9Base :: LPDIRECT3DDEVICE9 Device '
Found on line 101 of input from line 100 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h
Error parsing argument for function ReportCreateDevice function may be invalid.

Type 'ID3D9DeviceOverlayPtr' was not found.  Defaulting to type voidPtr.

Found on line 101 of input from line 100 of file C:\\Users\\Steven\\Dropbox\\Stanford_SC2bot\\D3D9CallbackSC2\\Base\\d3d9Callback.h
*********
??? Error using ==> loadlibrary at 441
Building d3d9Callback_thunk_pcwin64 failed.  Compiler output is:
cl -I"C:\Program Files\MATLAB\R2011a\extern\include"  /Zp8  /W3  /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0  /nologo  -I"C:\Users\Steven\Dropbox"
-I"C:\Users\Steven\Dropbox\Stanford_SC2bot\D3D9CallbackSC2\Base" "d3d9Callback_thunk_pcwin64.c" -LD -Fe"d3d9Callback_thunk_pcwin64.dll"
d3d9Callback_thunk_pcwin64.c
C:\Users\Steven\Dropbox\Stanford_SC2bot\D3D9CallbackSC2\Base\d3d9Callback.h(28) : error C2146: syntax error : missing ')' before identifier 'DWORD'
C:\Users\Steven\Dropbox\Stanford_SC2bot\D3D9CallbackSC2\Base\d3d9Callback.h(28) : error C2061: syntax error : identifier 'DWORD'
C:\Users\Steven\Dropbox\Stanford_SC2bot\D3D9CallbackSC2\Base\d3d9Callback.h(28) : error C2059: syntax error : ';'

现在我检查了 Matlab 论坛并尝试了通常的嫌疑人(设置 c++ 编译器,确保它不是 32 位 Matlab 上的 64 位 dll,并确保 dll 是“extern c”)。我开始认为问题在于 dll 大量从 directx 库以及来自同一网站的附加 dll 中提取。也许 Matlab 不知道它们,这导致了“类型未知”的问题?这是我唯一能想到的,但这对我来说没有意义,因为正在加载的库已经编译成 dll。

无论如何,我对处理 dll 还是很陌生,所以我的直觉可能会偏离。关于为什么 Matlab 无法识别类型以及如何解决问题的任何想法?

【问题讨论】:

标签: c++ matlab dll


【解决方案1】:

来自这个discussion!在 SO 上,看起来导出的 dll 函数是 C 函数,而不是 matlab 中 loadLibrary 的 C++ 函数。

同样在错误消息的末尾,似乎是另一个 dll (d3d9Callback_thunk_pcwin64.dll),并且缺少一些包含文件,因此编译器错误。确保要在 matlab 中加载的库具有可用于 matlab 搜索路径的依赖 dll。

更新

看了一些评论in matlab forum!要了解 d3d9Callback_thunk_pcwin64 的到来,有点奇怪,因为您提到您已经确认 64 位 dll 与 32 位 matlab 兼容性。

【讨论】:

  • 依赖的 dll 是否也需要通过 loadlibrary 加载,或者只是在搜索路径上?后一个选项不会改变我得到的错误:-/
  • 回答搜索路径,可以考虑addpath(mathworks.com/help/techdoc/ref/addpath.html)函数。但在我的更新中,我想知道为什么在上面的错误消息中创建 thunk 文件时出错。在 matlab doc “MATLAB 生成一个 thunk 文件,它是您的 64 位库的兼容层。”中有说明。无论如何,如果thunk文件难以生成,可以创建一个matlab调用的adapter dll,它正在调用实际的dll(适配器应该是简单的代码,以便matlab可以生成thunk dll)。
  • 我认为 thunk 问题(以及所有其他错误)只是 Matlab 类型替换的副产品。我已经加载了没有 thunk 问题的其他库,所以我不认为就是这样。
猜你喜欢
  • 1970-01-01
  • 2013-02-11
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多