我使用Visual Studio 2010在Windows XP(Qt 4.7.2)中编写并测试了一些代码,然后我尝试安装了Windows 7的另一台机器.
该程序打开一个QDialog并创建一个QGLWidget,我在其中显示网络摄像头图像(进行一些处理).在Windows XP中,图像显示正确,在我在Windows 7计算机上测试程序时,QGLWidget变黑并且不显示图像.然而,奇怪的是,当我在窗户周围移动并且它离开屏幕的边界时,当我再次停止移动时,图像会立即显示并且变黑,这使我认为图像被正确接收/处理(有时),并且它可能是QTimer的问题.
相关代码是:
初始化:
void GLVideo::initializeGL()
{
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
// Some OpenCV processing
// Here I declare the timer, might it be the problem?
m_timer = new QTimer(this);
connect( m_timer, SIGNAL(timeout()), this, SLOT(timeOutSlot()) );
m_timer->start( 33 );
}
Run Code Online (Sandbox Code Playgroud)
每次超时调用的插槽:
void GLVideo::timeOutSlot()
{
ReceiveInfo();
LoadTextures();
}
void GLVideo::LoadTextures()
{
// Get the image from the webcam
ProcessCamera();
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D( GL_TEXTURE_2D, 0, 3, qImage->width(),
qImage->height(), …Run Code Online (Sandbox Code Playgroud) 我需要在Windows 7(64位)中编写代码,执行具有共享存储器接口(SMI)的32位程序.更准确地说,我编写的程序写入SMI,32位程序从该SMI读取.
我遇到的第一个问题是我无法访问32位程序的源代码,这是无法解决的问题.第二个问题是SMI存储所写信息的地址.使用以下代码将此指向存储为基指针:
gpSharedBlock->m_pData[uiDataPointer] = (char __based(gpSharedBlock)*)pData;
Run Code Online (Sandbox Code Playgroud)
pData是指向我们正在编写的数据的指针,gpSharedBlock-> m_pData [i]指向存储的第i个元素.
可能从这里你已经注意到了这个问题; W32中的指针是4个字节,而W64中的指针是8个字节.然后,由于存储的值是64位指针,因此32位程序最终读取的值不是所需的值.
我的问题是:有没有办法将64位地址转换为32位地址,以便正在运行的程序读取正确的信息?
我读过WOW64,我想W32程序在它下面运行,但我不知道如何利用它.有任何想法吗?