⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createps.cpp

📁 Chapter02-Interface.rar com example
💻 CPP
字号:
// CreatePS.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

static char* g_pszUsage = 
"This program generates a makefile and a .def file to\n"
"for creating a proxy-stub dll.\n"
"\n"
"Usage: CreatePS basefilename [-r]\n"
"       Options:\n"
"	      -r -- Adds logic into the makefile\n"
"		        to register the dll after creation\n";

static char* g_pszDefFileInfo =
"LIBRARY      \"%sps.dll\"\n"
"\n"
"DESCRIPTION  'Proxy/Stub DLL'\n"
"\n"
"EXPORTS\n"
"	DllGetClassObject       @1	PRIVATE\n"
"	DllCanUnloadNow         @2	PRIVATE\n"
"	GetProxyDllInfo         @3	PRIVATE\n"
"	DllRegisterServer		@4	PRIVATE\n"
"	DllUnregisterServer		@5	PRIVATE\n";


static char* g_pszLinkInfo =
"%sps.dll: DllData.obj %s_p.obj %s_i.obj\n"
"	link /dll /out:%sps.dll /def:%sps.def /entry:DllMain DllData.obj %s_p.obj %s_i.obj \\\n"
"		kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib\n";

static char* g_pszRegSvrInfo =
"	regsvr32 /s %sps.dll\n";

static char* g_pszRuleInfo =
"\n"
".c.obj:\n"
"	cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL $<\n";

static char* g_pszCleanInfo =
"\n"
"clean:\n"
"	@del %sps.dll\n"
"	@del %sps.lib\n"
"	@del %sps.exp\n"
"	@del DllData.obj\n"
"	@del %s_p.obj\n"
"	@del %s_i.obj\n";

int main(int argc, char* argv[])
{
	if (argc < 2 || argc > 3) {
		printf(g_pszUsage);
		return 0;
	}

	bool bRegServer = false;
	if (3 == argc) {
		if (!stricmp(argv[2], "-r")) {
			printf("Unknown option: \"%s\"\n", argv[2]);
			return 1;
		}
		bRegServer = true;
	}

	char* pszBaseFileName = argv[1];


	// Step 1: Create def file
	char buf[_MAX_PATH];
	sprintf(buf, "%sps.def", pszBaseFileName);
	FILE* pOut = fopen(buf, "w");
	if (NULL == pOut) {
		printf("File: \"%s\" could not be created\n", buf);
		return 2;
	}

	fprintf(pOut, g_pszDefFileInfo, pszBaseFileName);
	fclose(pOut);

	// Step 2: Generate make file
	sprintf(buf, "%sps.mk", pszBaseFileName);
	pOut = fopen(buf, "w");
	if (NULL == pOut) {
		printf("File: \"%s\" could not be created\n", buf);
		return 3;
	}

	fprintf(pOut, g_pszLinkInfo,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName);

	if (true == bRegServer) {
		fprintf(pOut, g_pszRegSvrInfo, pszBaseFileName);
	}

	fprintf(pOut, g_pszRuleInfo, pszBaseFileName);


	fprintf(pOut, g_pszCleanInfo,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName,
		pszBaseFileName);

	fclose(pOut);

	printf("Files: \"%sps.def\" and \"%sps.mk\" created\n",
		pszBaseFileName,
		pszBaseFileName);

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -