我正在开发一个C ++ DLL,为第三方程序提供外部功能,其中我只有有限的信息。我只能将DLL文件名传递给该程序,并指出要使用的函数的名称。
我在VS2013开发了这个项目。在我的main.cpp文件中,我声明了要导出的两个函数(LookupLoadLat,LookupLoadMed),如下所示:
extern "C" __declspec(dllexport) bool LookupLoadLat(IAnyBody::IAData* pIADataReturn, const IAnyBody::IAData** pIAData);
extern "C" __declspec(dllexport) bool LookupLoadMed(IAnyBody::IAData* pIADataReturn, const IAnyBody::IAData** pIAData);
然后我做了检查
dumpbin.exe /EXPORTS ANNSimFuncAllIn.dll
我得到了
Dump of file ANNSimFuncAllIn.dll
File Type: DLL
Section contains the following exports for ANNSimFuncAllIn.dll
00000000 characteristics
55ACBE64 time date stamp Mon Jul 20 11:24:52 2015
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 0001CB80 LookupLoadLat = _LookupLoadLat
2 1 0001CD60 LookupLoadMed = _LookupLoadMed
Summary
1000 .data
7000 .rdata
2000 .reloc
1000 .rsrc
1D000 .text
当我尝试使用普通名称从外部程序调用函数时(我尝试使用或不使用下划线),它们无法识别。
然后,我使用MATLAB 2014b mbuild使用以下命令构建了相同的项目:
mbuild -v -I" .. \ extern" LINKFLAGS =" $ LINKFLAGS / DLL" LDEXT ="的.dll" CMDLINE250 =" mt -outputresource:$ EXE';' 2 -manifest $ MANIFEST" main.cpp AllInLateralNetworkFcn.cpp AllInMedialNetworkFcn.cpp
然后我用dumpbin做了同样的检查,我得到了不同的东西:
Dump of file ANNSimFuncAllIn.dll
File Type: DLL
Section contains the following exports for ANNSimFuncAllIn.dll
00000000 characteristics
55ACB52C time date stamp Mon Jul 20 10:45:32 2015
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 00002CF0 LookupLoadLat
2 1 00002EB0 LookupLoadMed
Summary
1000 .data
1000 .pdata
7000 .rdata
1000 .reloc
1000 .rsrc
26000 .text
这次调用程序会看到导出的函数并能够使用它们。
我认为当我使用VS2013构建因为名称损坏而外部程序没有看到正确的函数名称?
但是当我使用MATLAB mbuild构建时,这个问题并没有发生。
如何设置VS2013选项以获得与MATLAB mbuild相同的结果?我并不特别喜欢使用MATLAB构建C ++程序的想法。
谢谢