【发布时间】:2012-09-14 18:28:23
【问题描述】:
我创建了一个包含我自己的数学库的 dll。该库允许我使用它的类和一些插值方法。但是,当我的程序第一次从这个 dll 创建一个类时,它会生成第一次机会异常 - 访问冲突。之后,所有类及其方法都可以正常运行,并且程序可以正常运行和关闭。这是我的代码生成的唯一错误,并且显然会阻止它在发行版中运行。
我在属性页中缺少什么吗?还是我需要声明类方法 virtual METHOD() = 0? (我问这个,因为有很多要在一个类中添加来测试这个)。
我已经使用 /VERBOSE 检查链接器阶段,一切正常,生成的 dll 没有问题。我被这个问题难住了,我似乎很奇怪,它在创建第一堂课时就产生了这个问题,但之后就很好了。
任何提示都是最有帮助的,我现在已经为这个错误浪费了几个小时。
谢谢。
【问题讨论】:
-
你在使用 C++ 吗?在 IDE 中运行,查看异常发生的位置。
-
是的,它在 c++ 中,我在 VS2010 中运行过它,我能得到的唯一信息是它是一个堆损坏。调用堆栈只是告诉我它发生在哪个方法中。如果我将我的类构造函数移到其他地方,错误就会跟随它。我以为这是我在类中的虚拟析构函数,但可惜不是。
-
结果不知何故,我的 rundll32 坏了。因此出现了奇怪的错误。我将调查这是如何发生的。恼人的是我无法回答我自己的问题,哦,我必须更多地帮助社区。顺便说一句,这是因为我使用 vista 吗?听说直到win 7才有程序内存保护。
-
已解决!编译dll时缺少VS2010生成的dllmain.cpp。如果其他人 VS 没有生成此文件:#include "stdafx.h" BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } 返回真; }
标签: dll access-violation class-constructors