运行 测试代码导致的 dll 定位错误
dll loacation Error by running a testcode
我正在学习如何使用 dll 以及如何导出它们。我创建了一个小程序,它调用我的 dll 文件的不同组件(classes、方法、函数等)来使用它们。当我构建项目时没有问题,但是当我编译测试代码时却出现此错误。
错误翻译:{在 DLL“C:\Users\zboussaid\source\repos\WrapperTester\Debug”中找不到过程入口点“?Start@K_WrapperTeigha_DXF_DWG@@QAEXXZ”}。
如图所示,在我的测试代码所在路径下找不到我的DLL文件中的函数start方法。我已尝试按照此说明中所示配置我的属性,但正如我所说,我收到此错误。如果你能帮助我,我将不胜感激
class定义:
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();
}
宏:
#ifdef KWRAPPERTEIG_EXPORTS
#define KWRAPPERTEIG_API __declspec(dllexport)
#ifndef KWRAPPERTEIG__DLL
#define KWRAPPERTEIG__DLL
#endif
#else
#define KWRAPPERTEIG_API __declspec(dllimport)
#endif
@YujianYao-MSFT & Kiner_shah 非常感谢您的帮助。我已经解决了这个问题。我的问题是我在星期五创建了 dll 文件,然后想到更改创建 dll 文件的位置并忘记了它。然后在星期一我复制了不包含我的 start() 方法的旧文件。所以问题是dll文件设置的参数化错误。
这实质上意味着您的宏 KWRAPPERTEIG_API
没有正确定义。它应该扩展到 __declspec(dllexport)
以便导出 class 函数。
extern "C"
应该关闭函数的名称重整,因此它们可以被 C 使用。这可以工作,因为 C 理解函数,而不是重载函数。但是 C 不理解 classes 或 class 方法,所以它在那里有点毫无意义。你可以看到 Start@K_WrapperTeigha_DXF_DWG@@QAEXXZ
仍然是错位的。
我正在学习如何使用 dll 以及如何导出它们。我创建了一个小程序,它调用我的 dll 文件的不同组件(classes、方法、函数等)来使用它们。当我构建项目时没有问题,但是当我编译测试代码时却出现此错误。
错误翻译:{在 DLL“C:\Users\zboussaid\source\repos\WrapperTester\Debug”中找不到过程入口点“?Start@K_WrapperTeigha_DXF_DWG@@QAEXXZ”}。
如图所示,在我的测试代码所在路径下找不到我的DLL文件中的函数start方法。我已尝试按照此说明中所示配置我的属性,但正如我所说,我收到此错误。如果你能帮助我,我将不胜感激
class定义:
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();
}
宏:
#ifdef KWRAPPERTEIG_EXPORTS
#define KWRAPPERTEIG_API __declspec(dllexport)
#ifndef KWRAPPERTEIG__DLL
#define KWRAPPERTEIG__DLL
#endif
#else
#define KWRAPPERTEIG_API __declspec(dllimport)
#endif
@YujianYao-MSFT & Kiner_shah 非常感谢您的帮助。我已经解决了这个问题。我的问题是我在星期五创建了 dll 文件,然后想到更改创建 dll 文件的位置并忘记了它。然后在星期一我复制了不包含我的 start() 方法的旧文件。所以问题是dll文件设置的参数化错误。
这实质上意味着您的宏 KWRAPPERTEIG_API
没有正确定义。它应该扩展到 __declspec(dllexport)
以便导出 class 函数。
extern "C"
应该关闭函数的名称重整,因此它们可以被 C 使用。这可以工作,因为 C 理解函数,而不是重载函数。但是 C 不理解 classes 或 class 方法,所以它在那里有点毫无意义。你可以看到 Start@K_WrapperTeigha_DXF_DWG@@QAEXXZ
仍然是错位的。