我在一个函数中的CImageList中插入了位图,并且需要在另一个函数中稍后更改一些图像.但我无法提取CBitmap.代码如下:
CBitmap GetIndividualBitmap(CImageList oImgList, int nBmpNo)
{
IMAGEINFO imgInfo;
imagelist.GetImageInfo(index,imgInfo);
CBitmap bmp;
bmp.FromHandle(imgInfo.hbmImage);
return bmp;
}
Run Code Online (Sandbox Code Playgroud)
但是我得到的只是黑屏.谁能指出我哪里出错了?
这是问题所在.我的应用程序调用CoCreateInstance()创建在第三方DLL中实现的COM对象.该DLL调用set_terminate()更改terminate()处理程序并在其中传递其自己的terminate()处理程序的地址.
初始terminate()处理程序地址不会被该库保存 - 它不关心并只是更改处理程序而永远不会恢复它.一旦DLL被卸载,其代码就不再在进程内存中,因此如果现在terminate()被调用,程序将运行到未定义的行为.
我想检索并存储初始terminate()处理程序的地址,以便能够恢复它.我该怎么做?
请在回答之前阅读.我不希望你为我说明显的事.感谢:D
我试图区分指针和传递值.而且我认为我理解它们,但我读到的一个来源并不清楚,传递指针和传递值之间的区别是什么.考虑以下...
andy = 25;
fred = andy;
ted = &andy;
Run Code Online (Sandbox Code Playgroud)
第一行将值25传递给andy.第二行将andy的值传递给fred.现在fred拥有值25.第三行传递给ted.现在ted保存了andy的内存地址,其值为25.现在看看下一个代码
andy = 25;
fred = andy;
ted = &andy;
joe = *andy;
Run Code Online (Sandbox Code Playgroud)
上面的代码看起来就像第一个代码段,除了我们将指向andy的指针传递给了joe.现在,joe保持指针值为25.这几乎和刚刚做的一样(joe = andy).没有*
传递指针值与传递值相比有什么不同?
在我的解释中,似乎joe的指针值仍然受影响,如果后来我决定改变andy /的值,如果我只是通过值,它不会影响.Ť
据我所知,传递引用和传递指针之间的唯一区别是,一个保存地址,另一个保存该地址内的值.如果任何拥有该值引用的变量,它仍然会改变,决定改变它.如果是这种情况,通过引用传递和传递值的意义是什么.
这是我正在阅读的内容的链接
http://www.cplusplus.com/doc/tutorial/pointers/
多谢你们!!!
我是vc ++的新手.我已经使用WDK,DDK和Visual Studio 2008配置了我的系统.我想为我的无线硬件实现双重功能,我正在使用Vista,所以请从这里帮助我.所以告诉我应该使用哪个功能
提前致谢... :)
由OP编辑.
我的计划需要进行大量的清理和重组.
在另一篇文章中,我询问了如何离开MFC DocView框架并转向WinProc和Message Loop方式(简称为什么?).那么目前我在想我应该清理Doc View中的内容,也许以后转换为非MFC甚至是有意义的.我的Document类目前几乎没有任何用处.
我认为一个开始的地方是InitInstance()函数(发布在下面).
在这部分:
POSITION pos=pDocTemplate->GetFirstDocPosition();
CLCWDoc *pDoc=(CLCWDoc *)pDocTemplate->GetNextDoc(pos);
ASSERT_VALID(pDoc);
POSITION vpos=pDoc->GetFirstViewPosition();
CChildView *pCV=(CChildView *)pDoc->GetNextView(vpos);
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪.我只有一个文档和一个视图.我觉得我正在使用GetNextDoc()和GetNextView()向后推进它.尝试使用愚蠢的比喻; 这就像我手里拿着一本书,但我必须查看它的索引,找出书的标题所在的页面.我厌倦了对我的代码感到尴尬.我需要纠正或保证,或两者兼而有之.:)
此外,所有杂项都没有特别的顺序.我想将它们重新排列成可能更标准,更有条理或更直接的订单.
欢迎所有建议!
BOOL CLCWApp::InitInstance()
{
InitCommonControls();
if(!AfxOleInit())
return FALSE;
// Initialize the Toolbar dll. (Toolbar code by Nikolay Denisov.)
InitGuiLibDLL(); // NOTE: insert GuiLib.dll into the resource chain
SetRegistryKey(_T("Real Name Removed"));
// Register document templates
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CLCWDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CChildView));
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCmdLineInfo cmdInfo; …Run Code Online (Sandbox Code Playgroud) 我已经制作了一个自定义控件,当我希望它在屏幕上重新绘制时我调用Invalidate(),然后调用UpdateWindow(),但是我得到了消息:
对于第150行中的文件afxwin2.inl,debug assertion失败,这是:
AFXWIN_INLINE void CWnd::Invalidate(BOOL bErase)
{ ASSERT(::IsWindow(m_hWnd)); ::InvalidateRect(m_hWnd, NULL, bErase); }
Run Code Online (Sandbox Code Playgroud)
问题是,当我在发布模式下运行相同的应用程序时,它不会报告任何消息!所以这个线索让我觉得这是关于我应该改变的一些环境配置.
你怎么看?
谢谢.
基于我得到的错误,我有一篇类似于此前的帖子.我能够解决它,但从那时起我一直在做事情,因为标头阻止其他标头使用代码.老实说,这些标题让我很困惑,如果有人有任何资源可以解决这些类型的问题,那将会有所帮助.
我基本上想要做的是能够将rModel.h包含在RenderEngine.h中.每次我将rModel.h添加到RenderEngine.h时,rModel.h都不再能够使用RenderEngine.h.(rModel.h也有一个#include of RenderEngine.h).
简而言之,RenderEngine和rModel需要使用彼此的功能.除了所有这些混乱之外,Main.cpp还需要使用RenderEngine.
stdafx.h中
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include "resource.h"
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include "stdafx.h"
#include "RenderEngine.h"
#include "rModel.h"
// Global Variables:
RenderEngine go;
rModel *g_pModel;
...code...........
Run Code Online (Sandbox Code Playgroud)
rModel.h
#ifndef _MODEL_H
#define _MODEL_H
#include "stdafx.h"
#include <vector>
#include <string>
#include "rTri.h"
#include "RenderEngine.h"
........Code
Run Code Online (Sandbox Code Playgroud)
RenderEngine.h
#pragma once
#include "stdafx.h"
#include "d3d10.h"
#include "d3dx10.h"
#include "dinput.h" …Run Code Online (Sandbox Code Playgroud) 我一直在我的项目上得到这个错误,我无法弄明白!请帮忙!
错误C2143:语法错误:'常量'之前缺少')'
这条线是:
while (selection == ('a','b','c', 'd', 'e', 'f', 'g', 'h', 'i','A','B' 'C', 'D', 'E', 'F', 'G', 'H', 'I');
Run Code Online (Sandbox Code Playgroud)
我也知道有一种更简单的方式来写出那条线,但我不知道我怎么做.我是初学者,所以你们中的任何人都可以为我编辑这行!
我在一个类中使用此代码来使webbrowser控件访问一个网站:
void myClass::visitWeb(const char *url)
{
WCHAR buffer[MAX_LEN];
ZeroMemory(buffer, sizeof(buffer));
MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, url, strlen(url), buffer, sizeof(buffer)-1);
VARIANT vURL;
vURL.vt = VT_BSTR;
vURL.bstrVal = SysAllocString(buffer);
// webbrowser navigate code...
VariantClear(&vURL);
}
Run Code Online (Sandbox Code Playgroud)
我从另一个void函数调用visitWeb,该函数在app的handlemessage()上调用.我需要在这里做一些内存释放吗?我看到varurClear正在释放vURL,但是我应该为缓冲区释放内存吗?我被告知在另一个bool我在同一个应用程序中我不应该释放任何东西,因为当bool返回true/false时一切都清除了,但是这个空白会发生什么?
我得到的错误是:
错误1错误LNK2019:未解析的外部符号"double __cdecl getDollarAmt(void)"(?getDollarAmt @@ YANXZ)在函数_main hid.obj中引用错误2致命错误LNK1120:1未解析的外部
这是我的计划:
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
double getDollarAmt();
void displayCurrencies();
char getCurrencySelection (float amtExchanged);
bool isSelectionValid(char selection);
double calcExchangeAmt (float amtExchanged, char selection);
void displayResults(double newAmount, float amtExchanged, char selection, char yesNo);
const double russianRubles = 31.168;
const double northKoreanWon = .385;
const double chineseYuan = 6.832;
const double canadianDollar = 1.1137;
const double cubanPeso = 1.0;
const double ethiopianBirr = 9.09;
const double egyptianPound = 5.6275;
const double tunisianDinar = 1.3585; …Run Code Online (Sandbox Code Playgroud)