我在.h文件中有一个类:
class Blah { public: Blah(){} virtual ~Blah(){} void WriteMessage( bool MessageReceived ) { if(MessageReceived) { cout << "Message Recieved\n"; } } };
我试图弄清楚为什么我的代码不工作,所以我在WriteMessage()函数的条件内设置一个断点,但是一旦我在调试模式下开始运行项目,断点就会消失,并且它的工具提示说过:
Breakpoint will not currently be hit.
No executable code associated with this line.
我不知道为什么会发生这种情况,因为在.h文件中实现时,其他类的所有其他成员函数都可以正常工作.是什么原因造成的?
编辑:好的,根据要求,这里是我正在使用的真实代码的精简版本:
VimbaBridgeAPI.h(.dll的头文件)
#pragma once #ifdef VIMBABRIDGEAPI_EXPORTS #define VIMBABRIDGEAPI_API __declspec(dllexport) #else #define VIMBABRIDGEAPI_API __declspec(dllimport) #endif #include "AlCamIncludes.h" #include "VimbaSystem.h" //////////////////////////////////////////// // Global Variables /////////////////////// //////////////////////////////////////////// extern HBITMAP hbit; extern CEdit* global_filenamehandle; //////////////////////////////////////////// // Global Flags /////////////////////////// //////////////////////////////////////////// extern bool imageReady; extern bool take_picture; using namespace AVT::VmbAPI; VIMBABRIDGEAPI_API void BridgedGetImage(FramePtr framepoint,VmbUchar_t** imgDat); VIMBABRIDGEAPI_API HBITMAP ExternalFrameRecieved( const FramePtr pFrame ); ////////////////////////////////////////////////////////////////////////// ////////// MyObserver class /////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// class VIMBABRIDGEAPI_API MyObserver : public IFrameObserver { private: MyObserver( MyObserver& ); MyObserver& operator=( const MyObserver& ); //class member variables //BITMAPINFO* pbmi; CEdit* m_filenameedit; public: MyObserver(CameraPtr pCamera) : IFrameObserver(pCamera) {} virtual ~MyObserver() {} void FrameReceived ( const FramePtr pFrame ); };
注意:IFrameObserver不是由我写的,但FrameReceived函数是在IFrameObserver类中声明的纯虚拟的.他们的文档说,FrameRecieved每当框架进入时都会被API调用,我不得不实现该功能.我已经测试了这个功能,它的工作原理,但只有当定义在类之外(内部我得到我现在得到的错误)
void FrameRecieved( const FramePtr pFrame ) { DbgMsg(L"Frame Received\n"); //////////////////////////////////////////////////////////////////////// ////////// Setup Bitmap //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //// FILEHEADER //// BITMAPFILEHEADER* bf = new BITMAPFILEHEADER; bf->bfType = 0x4d42; bf->bfSize = 6054400 + 54 + sizeof(BITMAPINFO); bf->bfOffBits = 54; //// INFOHEADER //// BITMAPINFOHEADER* bih = new BITMAPINFOHEADER; bih->biSize = 40; bih->biWidth = 2752; bih->biHeight = -2200; bih->biPlanes = 1; bih->biBitCount = 32; bih->biCompression = 0; //bi->biSizeImage = 6054400; //not required bih->biXPelsPerMeter = 2835; bih->biYPelsPerMeter = 2835; bih->biClrUsed = 0; bih->biClrImportant = 0; //// INFO //// BITMAPINFO* pbmi = (BITMAPINFO*)alloca( sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256); pbmi->bmiHeader.biSize = sizeof (pbmi->bmiHeader); pbmi->bmiHeader.biWidth = 2752; pbmi->bmiHeader.biHeight = -2200; pbmi->bmiHeader.biPlanes = 1; pbmi->bmiHeader.biBitCount = 8; pbmi->bmiHeader.biCompression = BI_RGB; pbmi->bmiHeader.biSizeImage = 0; pbmi->bmiHeader.biXPelsPerMeter = 14173; pbmi->bmiHeader.biYPelsPerMeter = 14173; pbmi->bmiHeader.biClrUsed = 0; pbmi->bmiHeader.biClrImportant = 0; //create grayscale color palette for(int i=0; i<256; i++) { pbmi->bmiColors[i].rgbRed = BYTE(i); pbmi->bmiColors[i].rgbGreen = BYTE(i); pbmi->bmiColors[i].rgbBlue = BYTE(i); pbmi->bmiColors[i].rgbReserved = BYTE(0); } //// IMAGE DATA //// VmbUchar_t* imageData = NULL; BridgedGetImage(pFrame,&imageData); ////////////////////////////////////////////////////////////////////////// ////// Create image that's printed to dialog Box ///////////////////////// ////////////////////////////////////////////////////////////////////////// HDC hdc = ::GetDC(NULL); hbit = CreateDIBitmap(hdc,bih,CBM_INIT,imageData,pbmi,DIB_RGB_COLORS); //clean up DeleteObject(bf); DeleteObject(bih); DeleteObject(hdc); }