日常技术积累

  1. C++ DLL的类接口形参传递异常

  • 情况一:形参中含有CString,参数栈内存异常

原因分析:形参中,字符串的传递,不要使用临时变量拷贝赋值,这样导致了形参的栈数据异常,导致形参中的ini类型的变量也出现了异常

解决方案:字符串的传递使用引用或者char*代替

class __declspec(dllimport) CInstrumentCtrlSample
{
public:
    //该写法正常
    bool Connect(const CString& resourceName, int tryTimes, CString& errMsg); 
        
    //该写法异常:如果写成下面这样会出现int参数异常,errMsg的内存也无法正常读取,具体原因未知。
    bool Connect(CString resourceName, int tryTimes, CString& errMsg);  
}
  • 情况二:形参中含有STL类型数据,如std::map,std::list等

原因分析:DLL接口不能使用STL,具体参考:跨dll访问STL的map的问题 _followme163的博客-CSDN博客

解决方案:STL改为类的私有变量,暴露容器的操作函数,例如:

class DLL_API NeowayPrint
{
public:
    void ClearBtwSubStringMap() {
        m_BtwSubStringMap.clear();
    }
    void SetBtwSubString(const std::string& key, const std::string& value) {
        m_BtwSubStringMap[key] = value;
    }

private:
    std::map <std::string, std::string> m_BtwSubStringMap;
};

原因分析:string的内存是随内容变化的,这导致了结构体中的数据内存分布变更,导致在DLL接口的参数传递中找不到正确的数据指针,例如下面的代码,std::string变量放在了最前面,从而导致了这个结构体形参传入时,后面的int、bool等数据因为找不数据地址导致数据异常

typedef struct _PrintExecutionParameter_
{
    std::string PrinterName; //打印机名称
    int printCountMax; //连续打印最大数量(达到此数量后会提示)
    int PrintNum; //打印数量(执行一次打印动作,打印多少张)
    int SamebtPrintNum; //一张纸打印多少张模板
    bool IsShowPrintDialog; //是否显示打印窗口
}PrintExecutionParameter, *pPrintExecutionParameter;

解决方案:将std::string变量放到最后

typedef struct _PrintExecutionParameter_
{
    int printCountMax; //连续打印最大数量(达到此数量后会提示)
    int PrintNum; //打印数量(执行一次打印动作,打印多少张)
    int SamebtPrintNum; //一张纸打印多少张模板
    bool IsShowPrintDialog; //是否显示打印窗口
    std::string PrinterName; //打印机名称
}PrintExecutionParameter, *pPrintExecutionParameter;
  • 情况四:从接口中返回string,无论是通过返回值返回,还是通过形参引用参数返回,都导致了数据崩溃

原因分析:string的内存在DLL接口函数中申请的,而在返回时,申请的内存被释放了,从而导致接口调用者在获取数据时出现了堆栈内存异常崩溃

#ifdef DLL_PRINT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

DLL_API std::string GetBtwFilePath() const;
DLL_API void GetBtwFilePath(std::string& strBtwFilePath) const;

解决方案:尽量都使用char*等指针来替代string,增强DLL接口的兼容性(情况一也建议此方案)

#ifdef DLL_PRINT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

DLL_API void GetBtwFilePath(char* const _Destination, rsize_t const _DestinationSize) const;

情况五:接口调用时编译正常,Demo测试也正常,但是合入到实际工程中调用时奔溃,或是实际工程的其他函数在合入接口前正常,在合入后出现了异常

原因分析:接口中涉及的一些依赖DLL版本与实际工程中涉及的DLL版本冲突,例如:接口中用到了A.dll其版本3.1,实际工程中也用到了A.dll其版本是2.2

解决方案:令两者都使用相同版本的A.dll

  1. 待续...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 信息发布系统是一个重要的网络应用程序,需要定期进行日常更新和维护,以确保其正常运行和安全性。以下是一些常见的更新和维护任务: 1. 更新软件和操作系统:定期更新系统和软件,包括安全补丁、新功能和性能优化,以确保系统运行最新版本,并修复已知漏洞和问题。 2. 定期备份数据:备份系统数据,以防止数据丢失或意外删除。备份应该存储在不同的位置,以保证数据的完整性和安全性。 3. 管理用户账户:在系统中管理用户账户,包括添加、删除和修改账户信息,确保只有授权用户可以访问系统。 4. 监控系统性能:监控系统的性能和资源使用情况,及时发现并解决任何潜在的问题。 5. 更新内容和设计:定期更新内容和设计,以保持系统的新鲜感和吸引力,同时改进用户体验。 6. 测试和维护安全性:定期测试系统的安全性,确保没有任何潜在的漏洞和安全问题。同时,定期更新和维护安全性,以确保系统的安全性。 7. 提供技术支持:提供技术支持,解决用户遇到的问题,并及时响应用户的反馈和意见。 总之,信息发布系统需要定期进行更新和维护,以确保其正常运行和安全性。这些任务需要专业的技术人员来完成,并需要制定详细的更新和维护计划,以确保系统始终保持最佳状态。 ### 回答2: 信息发布系统是一种用于向广大用户发布各种信息的平台。为了保持其稳定运行和良好使用体验,日常更新维护是十分必要的。 首先,信息发布系统需要进行常规的软件更新和bug修复,以确保系统的安全性和稳定性。随着技术的不断进步,系统可能会存在一些漏洞或者功能上的不足,通过定期进行软件更新和bug修复,可以提高系统的性能和安全性,减少用户在使用过程中可能遇到的问题。 其次,信息发布系统还需要根据用户需求及时添加新的功能及优化体验。随着用户需求的变化和技术的发展,系统可能需要加入一些新的功能,以满足用户的需求。此外,还可以通过不断优化用户界面、提升页面加载速度、改进用户交互等方面来提升用户体验,使用户更加愿意使用该系统。 同时,信息发布系统也需要进行数据备份和存储容量的管理。系统中积累的信息量庞大,为了确保数据的安全性和可靠性,需要定期进行数据备份。此外,还需要关注系统的存储容量,及时清理冗余数据,以保证系统的运行效率。 最后,定期进行系统性能的评估和优化也是信息发布系统日常维护的重要任务。通过对系统性能的评估,可以发现潜在问题和瓶颈,并对系统进行优化,以提升系统的整体运行效率和响应速度。 总而言之,信息发布系统的日常更新和维护是保证系统稳定性和用户体验的关键。只有不断关注系统性能、修复bug、添加新功能、备份数据等方面,才能确保信息发布系统始终处于良好的运行状态。 ### 回答3: 信息发布系统的日常更新维护对于系统的正常运行和信息的有效传递起到非常重要的作用。 首先,日常更新维护可以保证系统功能的完善和优化。随着技术的不断发展和用户需求的变化,信息发布系统需要不断升级和改进,以适应新的问题和需求。例如,可以针对系统漏洞进行修复,改进系统的响应速度和安全性,增加新的功能和界面设计等,以提升用户体验和系统的可靠性。 其次,日常更新维护可以确保信息的准确性和时效性。信息发布系统以传递信息为主要任务,因此在维护过程中需要对已有信息进行及时更新和调整。新的信息可以通过系统的发布功能进行更新,过时或错误的信息应及时修正,以避免用户获得错误或过期的信息。在维护过程中,还可以进行信息的筛选和分类,优化信息的组织和呈现方式,提升用户的查阅效率。 此外,日常更新维护还包括对系统数据的备份和恢复。数据备份可以防止系统故障、人为错误或网络攻击等导致数据丢失的情况发生,确保信息的安全性。同时,备份数据也可以用于系统的恢复工作,以便在系统故障或其他问题出现时,能够尽快地将系统恢复到正常运行状态。 总的来说,信息发布系统的日常更新维护工作是确保系统正常运行和信息传递的关键环节。通过系统功能的完善和优化、信息的准确性和时效性的确保,以及数据备份和恢复的措施,可以提高系统的可靠性、用户体验和信息发布的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值