dll里面初始化结构体,返回应用程序指向结构体的指针,应用程序可以通过这个指针读取它的成员变量吗

dll里面初始化结构体,返回应用程序指向结构体的指针,应用程序可以直接通过这个指针读取它的成员变量吗?

当然是可以的。但是更好的方式是把分配内存的工作交给调用者去做。因为这样不容易忘记释放内存。申请和释放的代码成对出现。

参考windows api里的GetWindowRect,它由调用者传入一个lpRect结构体指针,函数获取了窗口坐标,填充它。

只要是在同一个 EXE 内,也就是相同的询址空间内,指针都可以正常访问的。
无论是 DLL 中,还是在哪里。

你想这么用的话,需要保证两点。

1、你在内部初始化结构体对象时,必须使用malloc或new在堆上分配内存,然后在函数外使用后再释放。否则,你直接构造对象(也就是在栈上分配内存),那么你将返回野指针,这个非常危险。

2、必须保证你动态库外部程序也有相同的结构体声明,否则你指针无法完成转化,也就不能达到你要直接操作的目的了。

另外建议你传递时指针时用通用性指针,别直接用结构体指针,使用时在转化

只要在同一个进程空间,同时是共享堆等,然后DLL指针在合法生命期,那么就可以访问它的成员变量