DLL的问题,谁是真正的高手?

时间:2021-05-17 03:44:19
我在DLL中写了一个类 class AFX_EXT_CLASS CA
class AFX_EXT_CLASS CA
{
    f();
    CA();
    ~CA();
}
在另一个exe中 定义了CA a,
但在调用a.f()方法时,报内存错误。为什么?

然后我定义 CA * a;
a = new CA;
a->f();
delete a;
此时a->f();没报错误,但在delete a时报错,为什么?
请高手指点!

13 个解决方案

#1


No

#2


全部代码贴出来?

#3





================================================================
     ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆ 

下载地址:  
 http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
 http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  

#4


代码不全,看不明白;
有可能是函数内部的问题,你能不用指针试试吗?
CA a;
a.f();

#5


share dll link 了吗?

#6


f()方法肯定没问题!
我不知到在DLL中导出的CLASS是不是一定要用指针才能用?

#7


CA a;
a.f();

没必要,这样你试过了吗?

#8


DLL中导出的CLASS不是一定要用指针才能用,像你那么写也可以。
我觉得可能不是你程序的问题,要用dll导出的类需要注意以下几点,你看看是不是都注意到了。
1.如果dll中的一个类A在工程B中被用到了,那么A的.h文件一定要copy一份放到B的目录下,然后再需要的地方加include "A.h";
2.在工程B的setting中,一定要在link的标签页中包含A生成的.lib文件;
3.在link的标签页中,选择Input的设置,在Additional library path中加入dll的路径。注意是生成的.lib的路径;
4.一定要注意版本的协调,生成Debug的B.exe一定要用Debug的A.dll,对于Release同理;

其它的暂时没想起来,应该差不多就这些了。

#9


回SUPERJOE
其实我编译都通过了,问题是出在运行时!

#10


是不是在DLL这的代码中要加上什么参数才能解决问题?

#11


为什么不把全部代码贴出来呢?
这样大家都是在猜。

#12


参数?不用吧,就是在类前加一个AFX_EXT_CLASS呀。
你把代码贴出来看看

#13


a = new CA();这样比较好
建议检查版本问题,看你调用的是不是最新的DLL和EXE

#1


No

#2


全部代码贴出来?

#3





================================================================
     ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆ 

下载地址:  
 http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
 http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  

#4


代码不全,看不明白;
有可能是函数内部的问题,你能不用指针试试吗?
CA a;
a.f();

#5


share dll link 了吗?

#6


f()方法肯定没问题!
我不知到在DLL中导出的CLASS是不是一定要用指针才能用?

#7


CA a;
a.f();

没必要,这样你试过了吗?

#8


DLL中导出的CLASS不是一定要用指针才能用,像你那么写也可以。
我觉得可能不是你程序的问题,要用dll导出的类需要注意以下几点,你看看是不是都注意到了。
1.如果dll中的一个类A在工程B中被用到了,那么A的.h文件一定要copy一份放到B的目录下,然后再需要的地方加include "A.h";
2.在工程B的setting中,一定要在link的标签页中包含A生成的.lib文件;
3.在link的标签页中,选择Input的设置,在Additional library path中加入dll的路径。注意是生成的.lib的路径;
4.一定要注意版本的协调,生成Debug的B.exe一定要用Debug的A.dll,对于Release同理;

其它的暂时没想起来,应该差不多就这些了。

#9


回SUPERJOE
其实我编译都通过了,问题是出在运行时!

#10


是不是在DLL这的代码中要加上什么参数才能解决问题?

#11


为什么不把全部代码贴出来呢?
这样大家都是在猜。

#12


参数?不用吧,就是在类前加一个AFX_EXT_CLASS呀。
你把代码贴出来看看

#13


a = new CA();这样比较好
建议检查版本问题,看你调用的是不是最新的DLL和EXE