在dll中调用主程序中的全局变量和数组,并对其进行改动后,要传回主程序。怎么实现?
本来程序是写在一个cpp中的,自己写了几个函数,本来都是全局变量,函数直接对变量进行修改,但现在要把函数封装到dll中。这样在dll中就访问不到原来要修改的那些全局变量了...
本来程序是写在一个cpp中的,自己写了几个函数,本来都是全局变量,函数直接对变量进行修改,但现在要把函数封装到dll中。这样在dll中就访问不到原来要修改的那些全局变量了。。。。函数名称,参数,返回值都定死了,不能把那些要修改的全局变量作为函数参数穿进去。。
还有,另外问一下,在dll中声明一个全局的变量,那么一个dll中的几个函数在不同的时候调用访问的变量都是一样的。 展开
还有,另外问一下,在dll中声明一个全局的变量,那么一个dll中的几个函数在不同的时候调用访问的变量都是一样的。 展开
3个回答
展开全部
函数参数的规定应该不是绝对定死的,至少应该有针对不同类型参数的规定。
一般的做法是,使用指针在调用和被调用之间传递数据。做法可以参考WIN32API和一些大型软件的做法。据我所知,大致有两种情况:
1.类似WIN32API的做法。不论是IN还是OUT参数,所有的存储空间都有调用方提供。如:
GetTemp(TCHAR* TempPath);
调用时,TCHAR tp[80]; memset(tp, 0, 80*sizeof(TCHAR)); GetTemp(tp);
2.类似AutoCAD API的做法。凡是需要OUT的参数,所有的存储空间都由被调函数提供。这种情况,一般还同时会提供一个空间释放函数,类似free()。例:
GetTemp(TCHAR** TempPath);
调用时:TCHAR* tp=NULL; GetTemp(&tp); ...; free(tp);
一般的做法是,使用指针在调用和被调用之间传递数据。做法可以参考WIN32API和一些大型软件的做法。据我所知,大致有两种情况:
1.类似WIN32API的做法。不论是IN还是OUT参数,所有的存储空间都有调用方提供。如:
GetTemp(TCHAR* TempPath);
调用时,TCHAR tp[80]; memset(tp, 0, 80*sizeof(TCHAR)); GetTemp(tp);
2.类似AutoCAD API的做法。凡是需要OUT的参数,所有的存储空间都由被调函数提供。这种情况,一般还同时会提供一个空间释放函数,类似free()。例:
GetTemp(TCHAR** TempPath);
调用时:TCHAR* tp=NULL; GetTemp(&tp); ...; free(tp);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用的函数添加参数,把需要修改的变量声明成var或out类型,DLL里直接修改就行。
追问
额,,我这边函数是有统一标准的,不能添加规定之外的别的参数...怎么办?急..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说实话不懂啊。既然原来是全局变量,现在也可以写进动态库里做全局变量么。函数还是可以直接调用。有什么区别么。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询