关闭

VC笔记

标签: linkermakefilewindowsnulldllbuffer
704人阅读 评论(0) 收藏 举报
分类:

1、开启VS.net2003的环境变量的cmd窗口
%comspec% /k "C:/Program Files/Microsoft Visual Studio .NET 2003/Common7/Tools/vsvars32.bat"
cl -c test.cpp
link test.obj /OUT:test.exe
nmake:根据makefile来编译程序

2、在源文件中直接申明编译选项
#pragma comment(lib, "gdiplus.lib")//制定链接库文件
#pragma comment (linker, "/SUBSYSTEM:WINDOWS")
#pragma comment (linker, "/NODEFAULTLIB")
#pragma once

3、SetProcessWorkingSetSize(GetCurrentProcess(),-1,-1);最小化程序占用内存

4、程序挂起:Sleep(INFINITE);

5、简单的Win32程序,不要窗口:
#include <windows.h>
__stdcall WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
)
{
 Sleep(INFINITE);
 return 0;
}

6、最小体积的win32程序:(不要编译缺省库)
#pragma comment (linker, "/SUBSYSTEM:WINDOWS")
#pragma comment (linker, "/NODEFAULTLIB")
int WinMainCRTStartup()
{
 return 0;
}

7、利用记事本输出调试信息,在调试dll之类的程序比较方便
const char maintitle[] = "无标题 - 记事本";
LPCTSTR str = "TEST TEST TEST";
HWND h = ::FindWindow(NULL,maintitle);
::SendDlgItemMessage(h,0xf,EM_REPLACESEL,0,LPARAM(str) );

8、只允许运行一个实例
LPCTSTR myAtom = "LogCmd by monklong";
ATOM atom = GlobalFindAtom(myAtom)
if ( atom != 0 ) return 0;
GlobalAddAtom(myAtom);
//main process
GlobalDeleteAtom(atom);//程序退出时删除Atom,否则不能清除全局Atom

9、DLL中增加全局共享数据:
主程序中增加:(注意一定需要初始化)
#pragma data_seg("my_data_seg")
HHOOK hHook   = NULL;
HINSTANCE hInstance  = NULL;
static char logBuf[SIZE_BUFFER] = {0};
#pragma data_seg()
DEF文件中增加:
SECTIONS
my_data_seg READ WRITE SHARED

 


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:222929次
    • 积分:3028
    • 等级:
    • 排名:第11505名
    • 原创:68篇
    • 转载:29篇
    • 译文:1篇
    • 评论:26条
    最新评论