c++ - The value of ESP was not properly saved across a function call error -
i made .dll file qt , load in application. when it's return 1 function, receive:
the value of esp not saved across function call
i start dll project:
this device_manager_interface.hpp:
#ifndef __device_manager_interface_hpp__ #define __device_manager_interface_hpp__ #include <qtcore> class devicemanagerinterface { public: virtual bcr * getdevicebcr() = 0 ; . . . }; qt_begin_namespace q_declare_interface(devicemanagerinterface,"some_info"); qt_end_namespace #endif //__device_manager_interface_hpp__
this device_manager.hpp:
#ifndef __device_manager_base_hpp__ #define __device_manager_base_hpp__ #include "device_manager_interface.hpp" class devicemanager : public devicemanagerinterface { public: devicemanager(); virtual bcr * getdevicebcr(); . . . protected: virtual void initilzeavailabledevices(devicelist device_list); virtual word startup(); . . . }; #endif //__device_manager_base_hpp__
this device_manager.cpp:
#include "device_manager.hpp" devicemanager::devicemanager() { } void winapi devicemanager::initilzeavailabledevices(devicelist device_list) { word wfs_version = startup(); . . . } word devicemanager::startup() { wfsversion wfs_version; hresult hres; hres = wfsstartup(supported_versions, &wfs_version); word version = wfs_version.wversion; return version; }
wfsstartup function containing in xfsapi.h
, defined this.
hresult extern winapi wfsstartup ( dword dwversionsrequired, lpwfsversion lpwfsversion);
this device_manager_impl.hpp:
#ifndef __device_manager_wincore_hpp__ #define __device_manager_wincore_hpp__ #include "device_manager.hpp" class devicemanagerimpl : public qobject, devicemanager { q_object q_interfaces(devicemanagerinterface) public: devicemanagerimpl(); protected: . . . }; #endif //__device_manager_wincore_hpp__
this device_manager_impl.cpp:
#include "device_manager_impl.hpp" #include "xfsapi.h" #define brand_name "wincore" devicemanagerimpl::devicemanagerimpl() { m_brand_name = brand_name; fill_map_logical_names(); devicelist device_list = detectavailabledevices(); devicemanager::initilzeavailabledevices(device_list); } q_export_plugin2(device_manager_impl, devicemanagerimpl);
this project provides dll file called wincore.dll.
this how load .dll:
qpluginloader* pluginloader = new qpluginloader(filename); qobject *plugin = pluginloader->instance();
the filename
contains wincore.dll path , it's correct. problem startup()
in devicemanager
class. when wants return version
, error. doing wrong?
i found how fix problem!
right click on project , choose properties , go configuration properties , select c/c++ select code generation .
change basic run time check default
.
change struct member alliance 1 byte (/zp1)
.
i hope work guys too.
best regards
Comments
Post a Comment