VS2013无法导出外部程序可见的C ++ DLL函数,但MATLAB mbuild可以

时间:2015-07-20 10:54:45

标签: c++ matlab dll dllexport name-mangling

我正在开发一个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);
  1. 我在VS2013中成功构建了该项目。
  2. 然后我做了检查

    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
    

    当我尝试使用普通名称从外部程序调用函数时(我尝试使用或不使用下划线),它们无法识别。

    1. 然后,我使用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

    2. 然后我用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 ++程序的想法。

      谢谢

0 个答案:

没有答案