使用服务加载启动的dll模板代码

27服务解锁算法封装dll方法(C++) DLL文件在CANoe编程中用途广泛,熟练的掌握DLL编程可以强化CAPL脚本的功能;将common代码封装成DLL,可以减少冗余代码;而且诊断中的seedkey也是必不可少的。使用常规编程语言开发后,用VS生成的DLL是不能直接在CANoe中使用的,CANoe有自己的规则。本wiki就是讲解如何基于官方Demo,用VS封装符合CANoe使用DLL文件。 阅读详情

有时创建服务启动,服务的dll写法格式有一定要求,写了一个简单的模板记录于此,方便查询


1.编译环境为vs2008

2.创建一个win32 dll项目

3.代码如下


#include "stdafx.h"
#include <windows.h>

#pragma comment(lib,"Advapi32.lib")


DWORD					dwCurrState;
SERVICE_STATUS_HANDLE	hSrv;	

int		TellSCM					( DWORD dwState, DWORD dwExitCode, DWORD dwProgress );
void		WINAPI ServiceMain		( int argc, wchar_t* argv[] );
void		__stdcall ServiceHandler( DWORD dwCommand );

DWORD WINAPI proc_thread(LPVOID lparam)
{
	OutputDebugStringA("proc_thread");

	return 0;
}

void Startup()
{
	CreateThread(NULL,NULL,proc_thread,NULL,NULL,NULL);
}


void WINAPI ServiceMain( int argc, wchar_t* argv[] )
{
	OutputDebugStringA("ServiceMain Load");
	TCHAR svcname[256];
	lstrcpy(svcname,argv[0]);
	hSrv = RegisterServiceCtrlHandler( svcname, (LPHANDLER_FUNCTION)ServiceHandler );
	if( hSrv == NULL )
	{
		OutputDebugStringA("SvcHostDLL RegisterServiceCtrlHandler failed");
		return;
	}else FreeConsole();

	TellSCM( SERVICE_START_PENDING, 0, 1 );
	TellSCM( SERVICE_RUNNING, 0, 0 );

	Startup();

	return;
}


int TellSCM( DWORD dwState, DWORD dwExitCode, DWORD dwProgress )
{
	SERVICE_STATUS srvStatus;
	srvStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
	srvStatus.dwCurrentState = dwCurrState = dwState;
	srvStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_SHUTDOWN;
	srvStatus.dwWin32ExitCode = dwExitCode;
	srvStatus.dwServiceSpecificExitCode = 0;
	srvStatus.dwCheckPoint = dwProgress;
	srvStatus.dwWaitHint = 3000;
	return SetServiceStatus( hSrv, &srvStatus );
}

void __stdcall ServiceHandler( DWORD dwCommand )
{
	switch( dwCommand )
	{
	case SERVICE_CONTROL_STOP:
			TellSCM( SERVICE_STOP_PENDING, 0, 1 );
			TellSCM( SERVICE_STOPPED, 0, 0 );
			break;
	case SERVICE_CONTROL_PAUSE:
			TellSCM( SERVICE_PAUSE_PENDING, 0, 1 );
			TellSCM( SERVICE_PAUSED, 0, 0 );
			break;
	case SERVICE_CONTROL_CONTINUE:
			TellSCM( SERVICE_CONTINUE_PENDING, 0, 1 );
			TellSCM( SERVICE_RUNNING, 0, 0 );
			break;
	case SERVICE_CONTROL_INTERROGATE:
			TellSCM( dwCurrState, 0, 0 );
			break;
	case SERVICE_CONTROL_SHUTDOWN:
			TellSCM( SERVICE_STOPPED, 0, 0 );
			break;
	}
}



BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

4.创建一个def文件在里面写入导出文件内容如下


LIBRARY	verify

EXPORTS

ServiceMain

5.最后在vs2008中设置一下def文件,方法为,打开property pages,Linker-->Input-->Module Definition file,输入你的.def文件名

6.编译出的dll就可以被服务加载了。


dll使用stl/模板注意事项 起源 前段时间面试遇到这样一个问题:“封装dll时需注意哪些事项”,当时不知道题意,更理不清思路,当然,整个面试也挂掉了。 现在看来,这个题目有点太大了,刨去dll位数等不讲,我们针对dll中传递stl这种情况进行分析。 现象 在使用vs2010调用opencv2.4.10这个版本的findcontours函数时,传入了vector&lt;vector&lt;cv::point&gt;&g... 阅读详情

相关推荐

windows 动态库(dll)开发常见问题

从接触sdk开发,到现在已经有3年多了,趁着这个时候总结一波在windows开发动态库(dll)时容易碰到的问题,做个笔记。有错误欢迎指出。 1.dll入口做资源初始化和去初始化不容易管理。建议专门对外提供初始化接口和去初始化的接口。 在这边如果有做操作,注意case 条件 操作完成后,要及时break。 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call,

hallyz的博客 527

从excel模版生成数据库表DDL

想找个从设计文档直接生成DDL的工具,发现这里太少了,所以找了一个上传。 功能比较强大,支持的数据库有: DB2 MariaDB MySQL Oracle PostgreSQL SQL Server SQLite 功能有: Create Tables SQL Drop Tables SQL Drop and Create Tables SQL Create Tables IF Not Exists SQL 详见内部说明文档。

VS2010动态加载DLL实现指南

动态链接库(Dynamic Link Library,DLL)是Windows操作系统中一种实现代码共享的重要方式。DLL允许多个应用程序共享一组程序代码和资源,从而提高内存使用效率,降低程序的总体大小,实现模块化开发。本章将介绍DLL的基本概念、工作原理以及其在软件开发中的重要性。静态加载(也称为编译时加载)是在程序编译时,将DLL的相关信息直接写入程序的可执行文件中。在程序运行时,操作系统会自动加载所需的DLL文件。

weixin_33628677的博客 1030

c++ (源码)通过dll启动应用程序(exe)

在vs2005下调试通过<br>该解决方案包含三个项目(都比较简单,一看就明白):<br>Testdll项目——动态调用一个共享mfc dll,并且传递两个参数。<br>dlleg项目——一个dll,接受参数,启动一个应用程序(exe),并且给该exe文件传递两个参数。<br>testExe项目——接收dll传递过来的参数。(在***App里面)<br>需要这些功能朋友可以作为参考。

DLL写法与调用

编写DLL其实也不是一件十分困难的事,只是要注意一些事项就够了。为便于说明,我们先举一个例子。 library Delphi; uses SysUtils, Classes; function TestDll(i:integer):integer;stdcall; begin Result:=i; end; exports TestDll; begin end.     

CCCSSSDNNN的专栏 849

DLL编写教程

第二是GetProcAddress的使用,这个API是用来查找dll中的函数地址的,第一个参数是DLL的句柄,即LoadLibrary返回的句柄,第二个参数是dll中的函数名称,即dumpbin中输出的函数名(注意,这里的函数名称指的是编译后的函数名,不一定等于dll代码中的函数名)。FuncInDll@@YAXXZ,而并不是FuncInDll,这是因为c++编译器基于函数重载的考虑,会更改函数名,这样使用显式调用的时候,也必须使用这个更改后的函数名,这显然给客户带来麻烦。好了,废话少说,言归正传。

m0_63176080的博客 1915

DLL的生成、编写、调用总结

一. DLL的创建 二. DLL内容编写 三. DLL调用 四.dll编写时宏的解释

ZBMS_的博客 1万+

DLL教程--如何编写、调用DLL(附图说明)

该lib文件不同于<https://blog.csdn.net/weixin_43758311/article/details/133955852>中的静态库文件,此lib文件只是dll文件中导出函数的声明和定位信息,并不包含函数的实现(而第一节中的静态库文件,包含了函数的实现),因此此lib文件只是在调用对应dll库的工程编译时使用,不需要随exe发布。创建一个新的 DLL 项目时,通常会自动生成一些预编译头文件和其他文件,这些文件的作用是帮助加快编译速度和提高代码组织结构。,但是它不是预编译头文件。

m0_55621747的博客 1万+

如何写DLL

如何写DLL  DLL一般有2种写法。 第一种用MS.NET的向导帮助就能生产一个DLL,很简单。也就是有个类的头文件,写好DLL后把DLL和头文件给调用端一起使用。 第二种是写一个接口文件。 在这里,我介绍一下通过接口文件写DLL。接口文件主要就是用到纯虚类。(我以前明白什么是纯虚类,但就是不知道怎么用。也看过关于接口的介绍,但没有看到实际的例子) MSDN关于DLL也提到一句话,就是通

Ackarlix的专栏 1759

NX/UG启动画面定制:基于C++ DLL实现企业品牌加载动画

在工业软件开发与CAD环境定制中,通过动态链接库(DLL)扩展软件启动行为已成为一种常见技术实践。NX/UG作为主流CAD/CAE/CAM平台,其二次开发接口预留了用户出口机制,允许开发者通过特定环境变量与导出函数,在软件启动早期阶段加载自定义模块,从而接管启动画面展示。这类技术不仅可帮助企业统一品牌视觉、强化合规提示,还能实现动态版本播报与动画效果,且不破坏软件原生安装目录,便于大规模部署。基于C++ Win32与GDI+实现的自定义启动画面窗口,配合正确的卸载策略和DPI处理,可以稳定运行于企业数百台工

weixin_29235923的博客 272

C#调用DLL的几种方法

c#中dll调用方法 一、 DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现。 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL调用来完成一定操作的函数(方法。注:C#中一般称为“方法”),但这些函数不是执行程序本身的一部分,

钢铁男儿 1万+

SetDll DLL自动注入,让EXE启动加载自己的DLL

可以让EXE在启动的时候加载自己做的DLL,填写自己做的DLL名后选择EXE即可,这样目标程序在启动时就会加载刚才的DLL

c++ (源码)通过dll启动应用程序

testExe项目——接收dll传递过来的参数。(在***App里面)需要这些功能朋友可以作为参考。

如何编写DLL服务端程序

如何编写DLL服务端程序,c#代码示例,dll文件

超强补丁技术_让EXE启动时自动加载你的DLL(含VC6写的DLL源码模版)

目前很多EXE都是没有源代码的,如果要让这个EXE加载你写的DLL,除了LPK这种只能在旧系统里面运行的技术,还有一种方法就是给EXE加一个代码段,让exe启动的时候加载你写的DLL。那些不如写个exe直接修改目标程序的汇编内存,岂不是更方便,何必搞这个呢。其实不然,本贴的技术可以大大提高程序的安全性和简约化,至少不用你自己写一个exe把dll去注入到目标程序。 本帖技术,在PC时代的时候,很流行。特别是病毒感染这块。 本帖技术 支持win10,win7, 包括64位的win7系,和老系统XP,这个是PE加

追逐光芒,追随内心 2427

华为手机word插件加载失败_word加载启动失败

word里面使用endnote加载项总显示失败解决办法1: 打开WORD,选择菜单栏“工具”,再选择“自定义”,打开后在“endnote”选项前打钩。然后就可以看到了。解决办法2: 在endnote安装目录里找到 EN Cwyw.dot或者EN Cwyw.WordXP.wll,copy到C:\Documents and Settings\你的用户名 \Application Data\Micr...

weixin_33497800的博客 5841

C# WPF项目直接调用FFmpeg原生API的可运行模板(含自动加载DLL

这个资源包提供一个开箱即用的WPF桌面应用工程,基于FFmpeg.AutoGen 4.2.0实现对FFmpeg底层音视频能力的直接调用。项目已完整集成FFmpegHelper.cs和FFmpegBinariesHelper.cs两个核心辅助类,能自动探测并加载本地avcodec.dll、avformat.dll等必要动态库,无需手动配置环境变量或编译FFmpeg源码。解决方案包含标准WPF结构:App.xaml、MainWindow.xaml及其对应逻辑文件,同时内置Settings.settings配置管

spark7igniter的博客 190

DLL注入自动化界面化工具快速启动与执行

DLL注入是一种将DLL加载到目标进程的内存空间的技术。一个常见的DLL注入方法是使用,它允许在一个远程进程中创建新线程。使用注入DLL涉及以下步骤:将DLL的路径名复制到目标进程的地址空间。创建一个远程线程来执行函数,参数是DLL的路径名。此过程涉及许多Windows API调用和对目标进程的精确操作,因此必须非常小心地执行。下面是一个简单的代码示例:// 实现获取进程ID的逻辑在上面的代码中,InjectDLL

weixin_36483050的博客 859
上一篇: 渗透通过ftp -s:filename.txt下载文件
下一篇: 简明 Vim 练级攻略
冷风
冷风 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄21年 809粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值