DLL里面有一个函数Draw(HDC hdc),当我在一个Win32程序里调用这个函数的时候,会出现Buffer overrun detected!的错误,这是怎么回事呀?//在DLL中的函数如下:
DRAWTEXT_API void MyDrawText(HDC hdc)
{
return;//不管这里怎么写,都会出错,如果在这里向hdc绘画,也会画上去
}
//调用如下:
typedef void (WINAPI *fnDrawText)(HDC hdc);hLib = LoadLibrary("DrawText.dll");
if(hLib != NULL)
{
MyDrawText = (fnDrawText)GetProcAddress(hLib, "MyDrawText");
}
if(MakeWood)
{
MyDrawText(hdc);
}

解决方案 »

  1.   

    上面有个地方 写错了 , MakeWood 改为 MyDrawText
      

  2.   

    DRAWTEXT_API?
    typedef void (WINAPI *fnDrawText)(HDC hdc);?会不会是调有约定的问题?
      

  3.   

    DRAWTEXT_API是宏,#define DRAWTEXT_API extern "C" __declspec(dllexport),负责将函数导出调用约定么?应该不是,只要我把 DRAWTEXT_API void MyDrawText(HDC hdc) 换成 DRAWTEXT_API void MyDrawText(void) 就没有任何问题了,
    而且 就算是 DRAWTEXT_API void MyDrawText(HDC hdc) 也是可以调用的,只不过把Text画到窗体上后(已经画好了),程序就出现overrun的错误
      

  4.   

    typedef void (WINAPI *fnDrawText)(HDC hdc); d
    typedef void (*fnDrawText)(HDC hdc);
      

  5.   

    typedef void (WINAPI *fnDrawText)(HDC hdc); 改成
    typedef void (*fnDrawText)(HDC hdc);