然后在客户端初始化了接口,
m_iApplication.CreateDispatch("VBAIDE.Application");
程序在运行时没什么问题,可是就在程序关闭时,报出错误消息,我查了一下,就是这个接口在自动释放时出错。什么原因??
更为奇怪的是,同样的代码,在其他程序调用这个组件在自动释放时就没有这个错误。
12 个解决方案
#1
帮你UP了
#2
帮你UP,希望MVP现身,呵呵
#3
给出代码吧
#4
现在问题基本已经查明,我在DLL中实现了多文档的框架/窗口。在正常情况下是不出错的,可是我在DLL的框架程序中又再次调用了其他的DLL,再退出时就出错了,而且还出现了大量内存泄漏。不知道该怎样解决??
#5
其他dll 释放了吗?
看看引用计数
仔细检查,没别的方法
看看引用计数
仔细检查,没别的方法
#6
在程序退出之前调用m_iApplication.ReleaseDispatch呢?
有这种可能:
CoUnitialize()之后,m_iApplication再release就会出错。所以你保证m_iApplication在COM uninitialize之前释放
有这种可能:
CoUnitialize()之后,m_iApplication再release就会出错。所以你保证m_iApplication在COM uninitialize之前释放
#7
谢谢楼上两位,问题找到了,我在另一个DLL的初始化生命地方发现了
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.
这样的说明,也许正是因为这个原因造成的。可是有个问题我还是弄不明白,那就是DLL我是隐式链接的,那么又怎样去显式调用CDynLinkLibrary 来初始化它呢??
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.
这样的说明,也许正是因为这个原因造成的。可是有个问题我还是弄不明白,那就是DLL我是隐式链接的,那么又怎样去显式调用CDynLinkLibrary 来初始化它呢??
#8
//...then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL.
那是一行什么?你按照他的说明,把它取出来,另外export一个函数,然后在你的初始化部分调用这个函数
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL.
那是一行什么?你按照他的说明,把它取出来,另外export一个函数,然后在你的初始化部分调用这个函数
#9
我知道呀,可是具体怎么做呢?我导出了一个函数,可是在初始化部分总是不承认这个函数。你能否给出个具体例子??谢谢啦~~!!
#10
"可是在初始化部分总是不承认这个函数"
那你就用LoadLibrary, GetProcAddress的方式
我不知道你的具体情况,也没有遇到过这种问题,只能大致猜测一下,提供一点建议了。没有例子
那你就用LoadLibrary, GetProcAddress的方式
我不知道你的具体情况,也没有遇到过这种问题,只能大致猜测一下,提供一点建议了。没有例子
#11
我也遇到这种情况,郁闷
#12
up
#1
帮你UP了
#2
帮你UP,希望MVP现身,呵呵
#3
给出代码吧
#4
现在问题基本已经查明,我在DLL中实现了多文档的框架/窗口。在正常情况下是不出错的,可是我在DLL的框架程序中又再次调用了其他的DLL,再退出时就出错了,而且还出现了大量内存泄漏。不知道该怎样解决??
#5
其他dll 释放了吗?
看看引用计数
仔细检查,没别的方法
看看引用计数
仔细检查,没别的方法
#6
在程序退出之前调用m_iApplication.ReleaseDispatch呢?
有这种可能:
CoUnitialize()之后,m_iApplication再release就会出错。所以你保证m_iApplication在COM uninitialize之前释放
有这种可能:
CoUnitialize()之后,m_iApplication再release就会出错。所以你保证m_iApplication在COM uninitialize之前释放
#7
谢谢楼上两位,问题找到了,我在另一个DLL的初始化生命地方发现了
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.
这样的说明,也许正是因为这个原因造成的。可是有个问题我还是弄不明白,那就是DLL我是隐式链接的,那么又怎样去显式调用CDynLinkLibrary 来初始化它呢??
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.
这样的说明,也许正是因为这个原因造成的。可是有个问题我还是弄不明白,那就是DLL我是隐式链接的,那么又怎样去显式调用CDynLinkLibrary 来初始化它呢??
#8
//...then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL.
那是一行什么?你按照他的说明,把它取出来,另外export一个函数,然后在你的初始化部分调用这个函数
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL.
那是一行什么?你按照他的说明,把它取出来,另外export一个函数,然后在你的初始化部分调用这个函数
#9
我知道呀,可是具体怎么做呢?我导出了一个函数,可是在初始化部分总是不承认这个函数。你能否给出个具体例子??谢谢啦~~!!
#10
"可是在初始化部分总是不承认这个函数"
那你就用LoadLibrary, GetProcAddress的方式
我不知道你的具体情况,也没有遇到过这种问题,只能大致猜测一下,提供一点建议了。没有例子
那你就用LoadLibrary, GetProcAddress的方式
我不知道你的具体情况,也没有遇到过这种问题,只能大致猜测一下,提供一点建议了。没有例子
#11
我也遇到这种情况,郁闷
#12
up