windows编程,加载dll库示例

第一种方式,手动找到函数地址,进行调用。

LoadLibrary();

GetProcAddress();

生成dll库

#include<Windows.h>

//导出函数,可以加载的时候调用
_declspec(dllexport) void msg()
{

	MessageBoxA(0, "1", "2", 0);
}
//导出函数,可以加载的时候调用
_declspec(dllexport) int  add(int a, int b)
{
	return a + b;
}

调用dll库

#include<Windows.h>
#include<stdlib.h>
#include<stdio.h>

typedef void(*procA)();
typedef int (*procB)(int a,int b);
void main()
{

	HMODULE hdll = LoadLibrary("DLL.dll");  //加载dll
	if (hdll != NULL)
	{

		procB proc1 = (procB*)GetProcAddress(hdll, "add");
		if (proc1 != NULL)
		{
			printf("%d", proc1(4, 8));

		}
		FARPROC proc = GetProcAddress(hdll, "msg");
		if (proc != NULL)
		{
			proc();

		}
	}
	return 0;

}

第二种方式,利用开发环境的编译器,帮助我们实现。

时间: 2024-08-01 18:54:18

windows编程,加载dll库示例的相关文章

异常-C#调用动态库,无法加载 DLL&amp;amp;quot;xx.dll&amp;amp;quot;: 找不到指定的模块。

问题描述 C#调用动态库,无法加载 DLL"xx.dll": 找不到指定的模块. 报错内容:System.DllNotFoundException: 无法加载 DLL"XX.dll": 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 网上的各种方法我都试过了,都是这样 我把目标平台改成x64,报错就变成:System.BadImageFormatException: 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000

给.NET中的Windows窗体加载Xp样式

window|加载 给.NET中的Windows窗体加载Xp样式 作者:Heath Stewart 介绍 当Windows XP 带着他特有的可视化样式或者主题发布时,许多人为他拥有的华丽界面而兴奋.然而,当.NET1.0正式版本发布的时候,许多人包括我自己为Windows 窗体不支持Windows XP 的可视化样式而失望.我对可视化样式的API函数和微软的.NET框架开发文档进行了一番研究,而后认识到为.NET应用程序加上Xp样式也不是很难. 下面的将通过一个简单的程序来为你的程序和控件加上

利用xwizard.exe加载dll

本文讲的是利用xwizard.exe加载dll,在之前的文章介绍了利用Excel.Application object's RegisterXLL()加载dll的技巧.本文继续,介绍最近学习到的一种更为通用的方法--利用xwizard.exe加载dll.  该方法最大的特点是xwizard.exe自带微软签名,在某种程度上说,能够绕过应用程序白名单的拦截. 0x01 简介 本文将要介绍以下内容: · xwizard.exe简介 · 利用思路 · 实际测试 0x02 xwizard.exe简介 应

java 加载dll介绍(转)

最近在做的工作要用到本地方法,需要在Java中加载不少动态链接库(以下为方便延用Windows平台下的简写dll,但并不局限于Windows).刚刚把程序跑通,赶紧把一些心得写出来,mark.也希望对大家的类似工作有所帮助  首先,应当明确,dll有两类:(1)Java所依赖的dll和,(2)dll所依赖的dll.正是由于第(2)种dll的存在,才导致了java中加载dll的复杂性大大增加,许多说法都是这样的,但我实验的结果却表明似乎没有那么复杂,后面会予以详细阐述.  其次,Java中加载dl

C#中如何动态加载Dll

1.新建测试dll及方法,用vs2010新建winform程序,具体代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace reflect { public

C# 动态加载Dll

1.新建测试dll及方法,用vs2010新建winform程序,具体代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace reflect { public

Vista下使用VS2008编译.EXE的C#程序 出现错误&amp;amp;quot;无法加载 DLL“api_clnt.dll”: 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志。 (异常来自 HRESULT:0x800736B1)&amp;amp;quot;。

问题描述 Vista下使用VS2008编译.EXE的C#程序出现错误"无法加载DLL"api_clnt.dll":应用程序无法启动,因为应用程序的并行配置不正确.有关详细信息,请参阅应用程序事件日志.(异常来自HRESULT:0x800736B1)".api_clnt.dll是由C++语言实现的我想问下这个错误是由VISTA系统引起的,还是VS2008引起的呢,因为之前在XP系统下用VS2005编译时是正确的还有怎么解决谢谢 解决方案 解决方案二:先给自己顶下解决方

动态加载dll,扩展系统功能

动态加载dll,主要是为了扩展功能,增强灵活性而实现的.主要通过xml配置,来获取所有要动态加载的dll,然后通过反射机制来调用dll中的类及其方法. 研究了一天,小有所得,写了一个简单的动态加载dll的通用模块,拿出来与大家分享一下: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; usi

无法加载DLL“oramts.dll”: 找不到指定的模块

无法加载 DLL"oramts.dll": 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 这个错误, 解决方法: Oramts.dll 文件公开登记 Oracle 连接所涉及到在通过 Microsoft 分布式事务处理协调器 (MSDTC) 启动的事务中的公共 API. 在事务处理环境中运行时, System.Data.OracleClient 程序集调用这些 API. System.Data.OracleClient 程序集的早期版本不支持分布式的事务.