在Matlab中加载.dll会导致';找不到类型';问题 我一直希望在Matlab玩这个漂亮的C++ DLL(1),因为我有一些现有的Matlab素材,我认为可以从这个库的功能中受益。但是,每当我运行此命令加载库时: loadlibrary('d3d9Callback.lib','d3d9Callback.h')

在Matlab中加载.dll会导致';找不到类型';问题 我一直希望在Matlab玩这个漂亮的C++ DLL(1),因为我有一些现有的Matlab素材,我认为可以从这个库的功能中受益。但是,每当我运行此命令加载库时: loadlibrary('d3d9Callback.lib','d3d9Callback.h'),c++,matlab,dll,C++,Matlab,Dll,我收到大量关于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(...) > I

我收到大量关于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位的DLL上的一个64位DLL,并且确保DLL是‘外部C’)。我开始认为问题在于,dll大量地从directx库以及同一网站的附加dll中提取。也许Matlab不知道它们,这导致了“类型未知”问题?这是我能想到的唯一一件事,但这对我来说没有意义,因为正在加载的库已经编译成dll

不管怎样,我对处理DLL还很陌生,所以我的直觉可能有点不对劲。有没有想过为什么Matlab不能识别这些类型,以及我该如何解决这个问题?

由此开始!因此,在MATLAB中,输出的DLL函数看起来是C函数,而不是用于LabVIEW的C++函数。 同样在错误消息的末尾,似乎是另一个dll(d3d9Callback_thunk_pcwin64.dll),缺少一些包含文件,从而导致编译器错误。确保要加载到matlab中的库具有可用于matlab搜索路径的相关DLL

更新


看完一些评论!要了解d3d9Callback\u thunk\u pcwin64的未来,有点奇怪,因为您已经确认了64位dll与32位matlab的兼容性。

依赖dll是否也需要通过loadlibrary加载,或者只是在搜索路径上?后一个选项并没有改变我所得到的错误:-要在搜索路径上回答,可以考虑AdvApple()函数。但是在我的更新中,我想知道为什么在上面的错误消息中创建thunk文件时会出错。matlab文档中指出“matlab生成thunk文件,这是64位库的兼容层。”。无论如何,如果很难生成thunk文件,您可以创建一个由matlab调用的适配器dll,它调用实际的dll(适配器应该是简单的代码,以便matlab可以生成thunk dll)。我认为thunk问题(以及所有其他错误)只是matlab类型替换的副产品。我加载其他库时没有遇到thunk问题,所以我认为不是这样。应该有DLL的链接吗?这里有一个链接,指向可以下载构建DLL的项目的站点: