【发布时间】:2009-06-23 22:47:03
【问题描述】:
我已经获得了一个 C++ DLL 和相关的头文件,以便将它与我的应用程序集成。首先,我只是想从一个简单的 Win32 控制台应用程序(我使用 Visual Studio 2008 Express)调用 DLL。
我已通过在项目设置中将 DLL 指定为附加依赖项来链接该 DLL。
接口(即唯一导出的函数)只是返回一个指向我实际需要调用的类的实例的指针。我可以成功调用它,获取指针并调用我需要的第一个函数(“init”函数)。
当我调用实际执行所需处理的函数时,我间歇性地收到“0xC0000005:访问冲突读取位置......”错误。也就是说,我运行程序 - 它成功运行并退出 - 我尝试再次运行它(什么都不改变 - 所有参数都是硬编码的)并得到错误(并继续这样做)。
我无法始终如一地重现该问题,但我开始认为这可能与 DLL 未正确卸载有关 - 有一次出现错误后,我尝试删除 DLL 并被 Windows 告知它正在使用中。也就是说,在另一个情况下,我能够在收到错误后删除 DLL,将其复制回来,然后在下次运行时仍然收到错误。
我的 .exe 完成后是否应该正确卸载 DLL?尝试显式加载/卸载 DLL 而不是隐式执行会更好吗?
非常感谢任何其他帮助或建议。
【问题讨论】:
-
这是一个非常笼统的问题 - 您可以发布任何类型的代码或文档吗?
-
调试器会出现这种情况吗?或者更确切地说,当它发生时,为什么不附加一个调试器并查看调用堆栈?