又是权限问题

上周五发布了Beta版之后, 老板觉得这次加的功能挺多就试用了一下, 结果瞬间就崩了, 上去一顿猛批啊。 请他们试用了很久才发现又是因为权限问题。 在%ProgramFiles%下普通用户只有读取和执行的权限, 由于历史原因, 我们Client有一部分DLL是从其他地方copy到client.exe的当前目录下来动态加载的, 而这一版本恰好将管理员权限去掉了(因为Win7及以上版本在管理员权限不能访问网络共享路径), 两个巧合就碰撞到一起导致了这个bug的产生, 当然其实有些代码不是很规范, 不然应该……

多线程调DLL

最近写代码一不小心又着了多线程的道, 背景如下: 前不久写了这样一个DLL: const wchar_t *a = L"xxxx"; const wchar_t *b = L"xxxx"; int do_something_a(struct axx *param_a) { ... } int do_something_b(struct bxx *param_b) { ... } 在do_something_a与do_something_b中分别用到了字符串a, b.本来这样相安无事, 可是很多地方会用到这个DLL的代码, 但是字符串a, b并不一样, 而字符中a, b可以根据param_a, param_b中的信息来生成, 本着代码正交性的原则, 将DLL……

关于用DLL接中使用std::vector之后出现的问题

最近在代码中用了这样一个DLL,采用静态加载方式使用,原型类似如下: XXX_API int xx_func(std::vector<struct xx> &xx_tbl, ..., ...); //代码中会用xx_tbl.push_back(xx);之类的代码向xx_tbl里面填充数据 但是却出现一个奇葩问题,每当调用这个DLL的程序退出时Debug版本有很大概率会崩溃在这个std::vector<struct xx>的析构函数上。 研究了好久才发现,当DLL中调用push_back函数时,其实std::vector<struct xx>的构造函数分配的内存是属于这个DLL的资源……