问题描述
- dll里面初始化结构体,返回应用程序指向结构体的指针,应用程序可以通过这个指针读取它的成员变量吗
-
dll里面初始化结构体,返回应用程序指向结构体的指针,应用程序可以直接通过这个指针读取它的成员变量吗?
解决方案
当然是可以的。但是更好的方式是把分配内存的工作交给调用者去做。因为这样不容易忘记释放内存。申请和释放的代码成对出现。
参考windows api里的GetWindowRect,它由调用者传入一个lpRect结构体指针,函数获取了窗口坐标,填充它。
解决方案二:
只要是在同一个 EXE 内,也就是相同的询址空间内,指针都可以正常访问的。
无论是 DLL 中,还是在哪里。
解决方案三:
你想这么用的话,需要保证两点。
1、你在内部初始化结构体对象时,必须使用malloc或new在堆上分配内存,然后在函数外使用后再释放。否则,你直接构造对象(也就是在栈上分配内存),那么你将返回野指针,这个非常危险。
2、必须保证你动态库外部程序也有相同的结构体声明,否则你指针无法完成转化,也就不能达到你要直接操作的目的了。
另外建议你传递时指针时用通用性指针,别直接用结构体指针,使用时在转化
解决方案四:
只要在同一个进程空间,同时是共享堆等,然后DLL指针在合法生命期,那么就可以访问它的成员变量
解决方案五:
结构体中的指针变量问题
结构体指针内的指针变量成员的内存分配
时间: 2025-01-21 12:06:42