我在视觉工作室大约1年前开发了一个带gtkmm的应用程序。当我使用Windows XP和Visual Studio 2010时没问题。现在,当我在Windows 8.1上运行它并在Visual Studio 2012中编译时 - 我可以启动它但是一旦我尝试调整窗口大小或按下OK按钮它崩溃了。
我可以在调试器中看到它在调整窗口大小时在回调函数中崩溃:
cr = window->create_cairo_context();
这时按下确定按钮:
}
当它返回时,它位于回调函数的末尾。
这里是源代码(回调函数)
void MyWindow::on_button_clicked(Glib::ustring data) {
Glib::RefPtr<Gdk::Window> window = myDrawingArea.get_window();
if(window)
{
Gtk::Allocation allocation = myDrawingArea.get_allocation();
const int width = allocation.get_width();
const int height = allocation.get_height();
std::cout << "w = " << width << std::endl;
// coordinates for the center of the window
int xc, yc;
xc = width / 2;
yc = height / 2;
Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
cr->set_line_width(1.0);
std::cout << "hello in on_button_clicked!!!\n";
a = 0;
b = 300;
c = 200;
d = 150;
e = 350;
f = 400;
// draw red lines out from the center of the window
cr->set_source_rgb(0.8, 0.5, 0.0);
cr->move_to(a, b);
cr->line_to(c, d);
cr->move_to(c, d);
cr->line_to(e, f);
cr->stroke();
std::cout << "here comes crasch!!!\n";
}
和另一个(调整大小)
bool MyWindow::on_drawing_expose_event(GdkEventExpose* event) {
Glib::RefPtr<Gdk::Window> window = myDrawingArea.get_window();
if(window)
{
std::cout << "here comes crasch!!!\n";
cr = window->create_cairo_context();
并且调试器给了我这个信息
sigc::trackable <Unable to read memory>
Glib::ObjectBase <Unable to read memory>
和callstack
> ConsoleApplication4.exe!MyWindow::on_drawing_expose_event(_GdkEventExpose * event) Line 173 C++
ConsoleApplication4.exe!sigc::internal::slot_call1<sigc::bound_mem_functor1<bool,MyWindow,_GdkEventExpose *>,bool,_GdkEventExpose *>::call_it(sigc::internal::slot_rep * rep, _GdkEventExpose * const & a_1) Line 137 C++
gtkmm-vc100-2_4.dll!100a549b() Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for gtkmm-vc100-2_4.dll]
libgtk-win32-2.0-0.dll!61859f1e() Unknown
libgobject-2.0-0.dll!63a45aca() Unknown
libgobject-2.0-0.dll!63a567e4() Unknown
libgobject-2.0-0.dll!63a5dafe() Unknown
libgobject-2.0-0.dll!63a5de66() Unknown
libgtk-win32-2.0-0.dll!6197a0f7() Unknown
libgdk-win32-2.0-0.dll!6c363fe9() Unknown
libgdk-win32-2.0-0.dll!6c363f9d() Unknown
msvcrt.dll!_free() Unknown
msvcrt.dll!_free() Unknown
000000a8() Unknown
msvcrt.dll!_free() Unknown
libglib-2.0-0.dll!685f6947() Unknown
gtkmm-vc100-2_4.dll!10011723() Unknown
gtkmm-vc100-2_4.dll!10024836() Unknown
libgobject-2.0-0.dll!63a45aca() Unknown
libgobject-2.0-0.dll!63a56438() Unknown
libgobject-2.0-0.dll!63a5dcd6() Unknown
KernelBase.dll!_WaitForMultipleObjectsEx@20() Unknown
libgdk-win32-2.0-0.dll!6c34137c() Unknown
libglib-2.0-0.dll!685f09eb() Unknown
libglib-2.0-0.dll!685f1205() Unknown
libglib-2.0-0.dll!685f13f5() Unknown
user32.dll!__InternalCallWinProc@20() Unknown
user32.dll!UserCallWinProcCheckWow() Unknown
user32.dll!DispatchClientMessage() Unknown
user32.dll!___fnDWORD@4() Unknown
ntdll.dll!_KiUserCallbackDispatcher@12() Unknown
user32.dll!RealDefWindowProcWorker() Unknown
user32.dll!RealDefWindowProcW() Unknown
uxtheme.dll!DoMsgDefault(struct _THEME_MSG const *) Unknown
uxtheme.dll!OnDwpSysCommand() Unknown
uxtheme.dll!_ThemeDefWindowProc() Unknown
uxtheme.dll!_ThemeDefWindowProcW@16() Unknown
user32.dll!DefWindowProcW() Unknown
libgdk-win32-2.0-0.dll!6c37db18() Unknown
user32.dll!__InternalCallWinProc@20() Unknown
user32.dll!UserCallWinProcCheckWow() Unknown
user32.dll!DispatchClientMessage() Unknown
user32.dll!___fnDWORD@4() Unknown
ntdll.dll!_KiUserCallbackDispatcher@12() Unknown
user32.dll!RealDefWindowProcWorker() Unknown
user32.dll!RealDefWindowProcW() Unknown
uxtheme.dll!DoMsgDefault(struct _THEME_MSG const *) Unknown
uxtheme.dll!OnDwpNcLButtonDown() Unknown
uxtheme.dll!_ThemeDefWindowProc() Unknown
uxtheme.dll!_ThemeDefWindowProcW@16() Unknown
user32.dll!DefWindowProcW() Unknown
libgdk-win32-2.0-0.dll!6c37db18() Unknown
user32.dll!__InternalCallWinProc@20() Unknown
user32.dll!UserCallWinProcCheckWow() Unknown
user32.dll!DispatchMessageWorker() Unknown
user32.dll!_DispatchMessageW@4() Unknown
libgdk-win32-2.0-0.dll!6c37dbe4() Unknown
libgdk-win32-2.0-0.dll!6c37dc16() Unknown
libglib-2.0-0.dll!685f09eb() Unknown
libglib-2.0-0.dll!685f1205() Unknown
libglib-2.0-0.dll!685efb1c() Unknown
libgtk-win32-2.0-0.dll!61857694() Unknown
msvcr100.dll!_free() Unknown
msvcr100.dll!_free() Unknown
sigc-vc100-2_0.dll!00092516() Unknown
gtkmm-vc100-2_4.dll!10045a4f() Unknown
ConsoleApplication4.exe!main(int argc, char * * argv) Line 10 C++
ConsoleApplication4.exe!__tmainCRTStartup() Line 536 C
kernel32.dll!@BaseThreadInitThunk@12() Unknown
ntdll.dll!__RtlUserThreadStart() Unknown
ntdll.dll!__RtlUserThreadStart@8() Unknown
所以我想知道什么是错的 - 因为它曾经在其他平台上运行没有问题?
非常乐于助人。如果有人想看到整个来源并尝试它,我可以发布它。