`
danke54
  • 浏览: 21056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

VC集成dll到资源中(也可是其他文件)

    博客分类:
  • VC
VC 
阅读更多
g_MakeResourceFromExe用于释放资源DLL与SYS中ID为IDR_DLL1的WinIo32.dll
和ID为IDR_SYS1的WinIo32.sys.ReleaseExe用于将文件属性置为只读,隐藏,归档
主要代码如下:
bool CtestDlg::g_MakeResourceFromExe(CString szExPathName, CString szResName, int nResID)
{
	HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);
	if(hSrc == NULL) return false;
	HGLOBAL hGlobal = LoadResource(NULL,hSrc);
	if(hGlobal == NULL) return false;
	LPVOID lp = LockResource(hGlobal);
	DWORD dwSize = SizeofResource(NULL,hSrc);
	CFile file;
	if(file.Open(szExPathName,CFile::modeCreate|CFile::modeWrite))
	{
		file.Write(lp,dwSize);
		file.Close();
	}
	FreeResource(hGlobal);
	return true;
}

void CtestDlg::ReleaseDLL()
{//从资源DLL中自释放WinIo32.dll自定义资源类型,ID=IDR_DLL1
	CString rc_dll = _T("WinIo32.dll");
	CString rc_sys = _T("WinIo32.sys");
	CFileFind find;
	if(!find.FindFile(rc_dll))
	{
		g_MakeResourceFromExe(rc_dll,_T("DLL"),IDR_DLL1);
		//改变WinIo32.dll的属性:只读,隐藏,归档
		DWORD dwAttributes = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY;
		SetFileAttributes(rc_dll,dwAttributes);  
	}

	if(!find.FindFile(rc_sys))
	{
		g_MakeResourceFromExe(rc_sys,_T("SYS"),IDR_SYS1);
		//改变WinIo32.dll的属性:只读,隐藏,归档
		DWORD dwAttributes = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY;
		SetFileAttributes(rc_sys,dwAttributes);  
	}
	find.Close();
}
代码中再动态加载WinIo32.dll.并且找到dll中的方法进行调用.主要方法如下:
typedef int (_stdcall *InitializeWinIoFun)();
InitializeWinIoFun InitializeWinIo = 0;

typedef int (_stdcall *GetPortValFun)(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
//typedef int (__cdecl *MYPROC)(short int* , short int* , short );  
GetPortValFun GetPortVal = 0;

typedef int (_stdcall *ShutdownWinIoFun)();
ShutdownWinIoFun ShutdownWinIo = 0;

HMODULE hDllInst = ::LoadLibrary(_T("WinIo32.dll"));

if (hDllInst)
	{
		InitializeWinIo = (InitializeWinIoFun)GetProcAddress(hDllInst, "InitializeWinIo");
		GetPortVal = (GetPortValFun)GetProcAddress(hDllInst, "GetPortVal");
		ShutdownWinIo = (ShutdownWinIoFun)GetProcAddress(hDllInst, "ShutdownWinIo");
	}
 
	int   bResult   =   InitializeWinIo(); 

 

分享到:
评论

相关推荐

    VC6调试卡死补丁dm.dll TLLOC.DLL

    在编程世界中,Visual C++ 6.0(简称VC6)是一款经典的集成开发环境,由微软公司发布,主要用于编写C++程序。然而,随着时间的推移,用户可能会遇到一些问题,比如在调试过程中出现“卡死”或“无响应”的情况。针对...

    VC6LineNumberAddin.dll

    - 浏览到刚才复制的"VC6LineNumberAddin.dll"文件位置,选中并打开。 - 确认插件已被添加后,勾选其复选框,然后点击"确定",完成插件的加载。 4. **设置行号显示**: - 关闭并重新打开VC6.0,现在你可以在编辑...

    C#调用vc开发dll文件的demo

    本示例“C#调用vc开发dll文件的demo”展示了如何在C#应用程序中无缝集成VC开发的DLL功能,实现两者之间的交互。 首先,我们需要理解DLL的基本概念。DLL(Dynamic Link Library)是Windows操作系统提供的一种共享...

    VC2015_dll_x86.zip

    在Windows操作系统中,DLL文件是可重用的代码和数据模块,它们包含了执行特定任务所需的函数和其他资源。这些文件被多个程序共享,以减少内存占用和磁盘空间。 描述中的“VC2015”进一步确认了这是关于Visual ...

    DLL.zip_DLL vc_dll

    完成操作后,别忘了使用`FreeLibrary`来释放DLL资源。 在实际操作中,我们需要遵循以下步骤: 1. 定义DLL中的接口函数,例如: ```cpp #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #...

    DLL.rar_VC6.0 .dll_dll调用_vc6 dll

    本资源"DLL.rar"是一个关于VC6.0环境下DLL调用的实例,特别适合初学者了解和学习DLL的创建与使用。 VC6.0是Microsoft Visual C++ 6.0的简称,是一款经典的C++集成开发环境。在这个环境中,开发者可以编写和调试C++...

    封装VC访问SQL(文件中包括访问SQL的dll和测试程序)

    4. **使用方法**:在实际开发中,开发者需要将这个DLL导入到VC++项目中,设置正确的路径,然后通过`LoadLibrary`和`GetProcAddress`等API函数来加载和调用DLL中的函数。同时,需要根据DLL提供的接口文档,编写相应的...

    visual c++用VC纯资源DLL解决国际化问题_多国语言版i18n

    2. **编译资源文件**:将每个语言的资源文件编译成对应的DLL,例如ChineseResource.dll、EnglishResource.dll。这可以通过在VC++的命令行工具中使用RC编译器完成。 3. **设计主程序**:在主程序中,需要设计一个...

    Matlab与VC集成

    ### Matlab与VC集成知识点详解 #### 一、Matlab与VC集成概述 Matlab是一款集成了强大矩阵运算、数据处理及图形显示能力的高级软件工具。它的特点在于能够以较少的代码实现复杂的功能,并提供了直观的数据可视化...

    VC ++ 6.0环境中LIB与DLL文件的使用

    例如,数学库、图形库等都可以打包成LIB文件,方便集成到不同的项目中。 **2.3 在VC++ 6.0中的集成** 在VC++ 6.0中使用LIB文件,需要在项目属性的“链接器”->“输入”->“附加依赖项”中添加相应的LIB文件路径。...

    采用VC6.0编写的串口DLL源码

    在实际应用中,串口DLL的使用可以极大地方便串口通信功能的集成。例如,多个应用程序可以通过共享同一串口DLL来实现串口通信,而无需重复编写串口管理代码。这有助于降低代码复杂性,提高代码复用性和软件维护性。 ...

    sqlite在VC6下面的DLL与LIB文件

    在VC6项目中,你需要将SQLite的LIB文件(如`sqlite3.lib`)添加到你的工程设置中,这样编译器在生成可执行文件时会将这些函数的引用链接到相应的DLL入口点。确保在链接阶段不会出现找不到函数定义的错误。 3. **...

    VC.Delph.dll.rar_Delphi VC DLL_Vc

    压缩包中的"VC.Delph.dll.txt"文件很可能包含了关于如何进行这种跨平台调用的具体示例代码和说明。这可能包括了VC DLL的创建过程、Delphi端的调用方法,以及可能遇到的问题和解决策略。 总的来说,Delphi与VC DLL的...

    vc2008动态链接库(Dll)Demo

    4. **导出函数**:为了让其他程序能够找到并调用DLL中的函数,需要在DLL的头文件或.def文件中使用`__declspec(dllexport)`关键字导出函数。 调用DLL工程则涉及以下步骤: 1. **加载DLL**:使用`LoadLibrary`函数...

    CRC校验器,用VC实现算法,生成DLL动态连接库,在VB中调用,都是源码

    在本案例中,CRC算法作为一个独立的功能模块,被封装到DLL中,可以供其他程序(如VB,Visual Basic)调用。VB是一种面向对象的编程语言,适合快速开发用户界面友好、功能丰富的应用。 在实际应用中,CRC校验通常...

    如何用vc6创建和使用dll

    在Windows编程中,动态链接库(DLL)是一种重要的技术,它允许多个应用程序共享代码和资源。Visual C++ 6.0(简称VC6)是一款经典的集成开发环境,用于编写C++程序,包括创建和使用DLL。本文将详细介绍如何在VC6中...

    VC编写的生成条形码的DLL文件以及例子.zip

    在这个特定的压缩包"VC编写的生成条形码的DLL文件以及例子.zip"中,包含了一组由Visual C++(VC)编写的资源,用于帮助开发者创建和使用条形码。 首先,我们来看"VC编写的生成条形码的DLL文件"。DLL(Dynamic Link ...

    VC6.0 多国语言切换(DLL版本,包含DLL项目)

    2. 编译资源文件为DLL,如使用RC命令行工具生成CHN_DLL.dll和ENG_DLL.dll。 3. 在主程序中加载相应的DLL,并根据用户的选择动态地替换资源。 4. 实现语言切换功能,例如通过菜单选项或系统设置触发DLL的加载。 总的...

    VC实现两个文件“代码级”捆绑_将两个EXE作为资源加载进res中的

    在VC++环境中,将两个EXE文件“代码级”捆绑在一起是一...在实际应用中,除了EXE文件,还可以考虑捆绑其他的资源文件,如配置文件、数据文件等。在进行文件捆绑时,应充分考虑安全性和兼容性问题,确保程序的稳定运行。

    VC运行时的一些dll

    除了上述基本的VC运行时DLL,还有一些其他可能需要的库,如ATL(Active Template Library)和MFC扩展库,它们可能在某些特定的VC项目中使用。如果你的程序依赖于这些库,也需要确保它们的DLL文件在运行环境中可用。 ...

Global site tag (gtag.js) - Google Analytics