dll导出类的问题,可能涉及到内存分配上,高手来!

来源:百度知道 编辑:UC知道 时间:2024/05/30 13:54:59
导出的类中使用了CString,我想不是这个问题。在我的MFC程序中,使用了DLL,但是程序在运行时出现debug assertion failed!
expression:__CtrIsValidHeapPointer(pUserData),然后是三个选项,取消,重试,忽略三个。看来好像是堆的指针出了什么问题。但是如果我不用DLL导出类的话,直接把类放到MFC程序中,完全没问题,因为我以前就是先这样做的,我现在学DLL,想学习导出类怎么用,别说我多此一举。如果导出的类中的成员函数中涉及到动态分配内存的问题,然后在MFC程序中调用该函数,是不是会出现这样的问题呢?动态分配就在堆上,但是它分配在DLL上面,MFC程序中调用DLL,虽然把DLL加载到自己的地址空间,会不会因为地址的什么原因而出现这个问题?这只是我的猜想,高手帮忙分析一下,很急,今天这个程序就必须做出来!时间很少了!
我昨晚看了网上的资料,说是在PROJECT-SETTINGS-C/C++-CATEGORY-CODE GENERATION,设置成MULTITHREADED DLL,但是这样在编译时就出错,提示没解决的外部符号。UNRESOLVED SYMBOLS.
9点半有考试,中午回来。

问题说的还是不太清楚! 表面看应该是断言失败了, 你可以在失败的时候按"重试", 这时个代码会定位在失败的那个断言上, 你在根据当前调用栈来往回推;
另外, 如果DLL被加载进进程空间后, 它就完全失去的DLL本身的意义了, 成为进程的一部分, 进程可以调用标识为导出的接口/函数, 不知道你是怎么导出的, 一般应该是没问题的!

PS: 如果是在MFC中使用动态库, 每一个导出的函数开始部分都要求使用如下宏:
AFX_MANAGE_STATE(AfxGetStaticModuleState());

以上不知道对你有所帮助没!