但我对我能做什么以及我不能用DLL做什么有疑问.
>我可以将std:string或CString传递给DLL吗?
>我可以将指针传递给带有std :: string成员的结构并将其填入DLL中吗?
> DLL可以返回指向那里分配的结构的指针吗?它会有效吗?我可以删除吗?
>最好传递什么,std :: String或Cstring?
谢谢 !
解决方法
>紧密耦合的DLL:DLL使用完全相同的编译器版本,打包和调用约定设置,库选项作为应用程序构建,并且都动态链接到运行时库(/ MD编译器选项).这允许您来回传递对象(包括STL容器),从应用程序内部分配DLL对象,从其他模块中的基类派生,在不使用DLL的情况下执行所有操作.缺点是您无法再独立于主应用程序部署DLL.两者必须一起建造. DLL只是为了改善您的进程启动时间和工作集,因为应用程序可以在加载DLL之前开始运行(使用/ delayload链接器选项).构建时间也比单个模块快,特别是在使用整个程序优化时.但是优化不会跨应用程序DLL边界发生.任何非平凡的变化仍然需要重建两者.
>松散耦合:应用程序不依赖于DLL定义的对象的类布局.您只使用高度兼容的数据类型:基本类型,指针,函数指针和由这些元素组成的用户定义类型.类继承自定义接口的基类,没有数据成员,也没有非虚函数(这意味着没有构造函数,也没有标准库对象的共享,如std :: string或CString).所有分配和对象创建必须通过工厂函数完成.必须从分配内存的模块中释放内存.代码和数据是分开的.头文件明确说明每个导出函数的调用约定和允许跨越模块边界的每个结构的打包.优点是DLL和应用程序可以完全独立地更新.您可以使用新的运行时库,新的编译器版本甚至是全新的语言重建一个,而不必触及另一个.
我总是建议使用松散耦合的方法.