我想创建一个名称空间,它将包含几个类作为"包"的一部分.
我是否必须声明命名空间中的所有类?
例如,如果我有一个定义2dEngine命名空间的"2dEngine.h",我是否必须在该头文件中声明所有单独的类?或者我仍然可以将它们分成单独的标题(.h)文件并让它们成为命名空间的一部分?
伪示例:
TwoEngine.h
namespace TwoEngine
{
class Canvas
{
// Define all of Canvas here
};
class Primitive
{
// Define all of Primitive here
};
}
Run Code Online (Sandbox Code Playgroud)
而不是这样做,我想让Canvas和Primitive成为他们自己的.h文件,并且只是某种程度上声明它们是该命名空间的一部分.
对不起,我还是很陌生.
这是我的意思的一个例子......
我见过这样的一些应用程序,我从来没有见过它的工作原理的例子或解释.
有人知道吗?
另一个例子是在另一个中嵌入加密的EXE.它在内存中被提取和解密,而不会在执行之前保存到磁盘.
我已经看到在某些应用程序中用于防止盗版.
编辑:作为旁注,像UPX这样的程序是这样工作的吗?我查看了代码,但很难为我解读,我主要是出于好奇,我不需要它.
我抓住屏幕的一部分并扫描像素以获得特定的颜色范围.
我查看了MSDN的Capturing a Image示例,并了解如何使用这些函数.
我可以把这些位放到一个数组中,但是我不知道如何以这样的方式进行操作,我可以像运用图像一样循环它.一个伪示例(我肯定是这样的):
for ( x = 1; x <= Image.Width; x += 3 )
{
for ( y = 1; y <= Image.Height; y += 3 )
{
red = lpPixels[x];
green = lpPixels[x + 1];
blue = lpPixels[x + 2];
}
}
Run Code Online (Sandbox Code Playgroud)
这基本上就是我想做的事情,所以如果红色,蓝色和绿色是某种颜色,我会知道图像中(x,y)的坐标是什么.
我只是不知道如何以这种方式使用GetDIBits,以及如何适当地设置数组以便能够实现这一点.
我想在C中创建支持PHP的可能性最轻的HTTP服务器,如果它会产生巨大的差异,可能会使用FastCGI.
我不确定如何实现PHP支持.它是否只是通过.php文件的路径调用PHP.exe并读取输出?PHP中的header()之类的东西怎么样?那些服务器如何处理?
另一个问题是,为每个请求使用单独的线程是否理想?我不指望负载很重,但我对这个设计方面并不是100%肯定...
我对C和C++还很陌生,这是一次学习经历.
我正在使用C(而不是C++),我不确定如何避免使用全局变量.
我对C,它的语法以及如何编写基本应用程序有相当不错的把握,但我不确定构造程序的正确方法.
真正的大型应用程序如何避免使用全局变量?我很确定总会有至少一些,但对于用C编写的大型游戏和其他应用程序,最好的方法是什么?
是否有任何好的,开源软件严格用C编写,我可以看一下?我无法想到任何问题,其中大多数似乎都是用C++编写的.
谢谢.
编辑
下面是一个示例,我将在一个简单的API挂钩应用程序中使用全局变量,它只是另一个进程中的DLL.
具体而言,此应用程序挂钩了另一个应用程序中使用的API函数.它通过使用WriteProcessMemory覆盖对原始的调用,并使其调用我的DLL来实现.
但是,当取消挂起API函数时,我必须回写原始内存/机器代码.
因此,我需要为该机器代码维护一个简单的字节数组,每个API函数都挂钩一个,并且有很多.
// Global variable to store original assembly code (6 bytes)
BYTE g_MessageBoxA[6];
// Hook the API function
HookAPIFunction ( "user32.dll", "MessageBoxA", MyNewFunction, g_MessageBoxA );
// Later on, unhook the function
UnHookAPIFunction ( "user32.dll", "MessageBoxA", g_MessageBoxA );
Run Code Online (Sandbox Code Playgroud)
对不起,如果那令人困惑.
1>cb.c(51): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(51): error C2059: syntax error : ';'
1>cb.c(51): error C2059: syntax error : 'type'
1>cb.c(52): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(52): error C2059: syntax error : ';'
1>cb.c(52): error C2059: syntax error : 'type'
1>cb.c(122): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(122): error C2059: syntax error : ';'
1>cb.c(122): error C2059: syntax error : 'type'
1>cb.c(127): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(127): error C2059: syntax error : …Run Code Online (Sandbox Code Playgroud) 我正在使用SHGetSpecialFolderLocation API函数.我的应用程序设置为"使用Unicode字符集".
这是我到目前为止所拥有的:
int main ( int, char ** )
{
LPITEMIDLIST pidl;
HRESULT hr = SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl);
/* Confused at this point */
wstring wstrPath;
wstrPath.resize ( _MAX_PATH );
BOOL f = SHGetPathFromIDList(pidl, wstrPath.c_str () );
/* End confusion */
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
error C2664: 'SHGetPathFromIDListW' : cannot convert parameter 2 from 'const wchar_t *' to 'LPWSTR'
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?什么是正确的C++方式来做到这一点?
谢谢!
可能重复:
指向局部变量的指针
我已经在这个网站上阅读了很多关于同样问题的其他主题,因为我知道它很常见.但我想我是愚蠢的,无法弄清楚这样做的正确方法.所以,我为这些问题中的另一个道歉,我希望有人可以给我一个简单的解决方案和/或解释.
这是整个代码:
MAIN.C
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <stdlib.h>
#include <tchar.h>
LPTSTR GetApplicationPath ( HINSTANCE Instance );
int APIENTRY _tWinMain ( HINSTANCE Instance, HINSTANCE PreviousInstance, LPTSTR CommandLine, int Show )
{
LPTSTR sMessage = GetApplicationPath ( Instance );
MessageBox (
NULL,
sMessage,
_T ( "Caption!" ),
MB_OK
);
return 0;
}
LPTSTR GetApplicationPath ( HINSTANCE Instance )
{
_TCHAR sReturn[MAX_PATH];
GetModuleFileName ( (HMODULE) Instance, sReturn, MAX_PATH );
return sReturn;
}
Run Code Online (Sandbox Code Playgroud)