Home > other >  Compiling problems by dll
Compiling problems by dll

Time:02-23

I am learning how to use dlls and how to export them. I have created a small program that calls the different components(classes, methods, functions, ect.. ) of my dll file to use them. When I build the project I get no problem, but when I compile the test code I get this error.

Insert image description here

Error translation: {The procedure entry point "?Start@K_WrapperTeigha_DXF_DWG@@QAEXXZ" was not found in the DLL "C:\Users\zboussaid\source\repos\WrapperTester\Debug"}.

The image shows that the start method, which is a function in my DLL file, cannot be found in the path where my test code is located. I have tried to configure my properties as shown in this drescription, but as I said, I get this error. I will be very grateful if you can help me

class definition:

extern "C" class KWRAPPERTEIG_API K_WrapperTeigha_DXF_DWG
 {
  private:
     //create Data base
     OdDbDatabase* pDb;

     //tables
     OdDbLinetypeTablePtr    w_kOdLinetypeTablePtr;
     OdDbLayerTablePtr       w_kOdLayerTablePtr;
     OdDbTextStyleTablePtr   w_kOdTextStyleTablePtr;
     OdDbBlockTablePtr       w_kOdBlockTablePtr;

     OdDbBlockTableRecordPtr     w_kOdModelSpaceBlockRecPtr;
     //OdDbTextStyleTableRecordPtr pTextStyle;
 public:
     OdDb::DwgVersion     m_OdDwgVersion;    // Dwg/Dxf Version
     OdDb::SaveType       m_OdSaveType;      // DWG oder DXF




 public:
     K_WrapperTeigha_DXF_DWG();
     ~K_WrapperTeigha_DXF_DWG();

     void Start();
  }

macros:

#ifdef KWRAPPERTEIG_EXPORTS
#define KWRAPPERTEIG_API __declspec(dllexport)
#ifndef KWRAPPERTEIG__DLL
    #define KWRAPPERTEIG__DLL
#endif
#else
#define KWRAPPERTEIG_API __declspec(dllimport)
#endif

CodePudding user response:

This essentially means that your macro KWRAPPERTEIG_API was not correctly defined. It should have expanded to __declspec(dllexport) in order for the class functions to be exported.

extern "C" is supposed to turn of name mangling of functions, so they can be used by C. That can work, because C understands functions, just not overloaded functions. But C doesn't understand classes or class methods, so that it a bit pointless there. You can see that Start@K_WrapperTeigha_DXF_DWG@@QAEXXZ is still mangled.

CodePudding user response:

@YujianYao-MSFT & Kiner_shah I really appreciate your help. I have solved the problem. My problem was that I created the dll file on Friday and then got the idea to change the location of creating the dll file and forgot about it. Then on Monday I copied the old file which does not contain my start() method. So the problem was the wrong parameterization of the dll file setting.

  • Related