手工加载DLL

1.为了能找到dll的函数地址,生成dll时需要将其中的函数声明为C函数(extern "C"):

#ifndef __MYDLL_H
#define __MYDLL_H

#ifdef MYDLL_EXPORTS
#define MYDLL __declspec(dllexport)
#else
#define MYDLL __declspec(dllimport)
#endif

extern "C" MYDLL int Add(int a, int b);

#endif

2.调用dll中的函数时,只需要*dll文件,不需要.h和.lib

#include <stdio.h>

#include <WinSock2.h>
#include <Windows.h>

int main()
{
HINSTANCE handle = LoadLibrary("DLL_07.dll");
if (handle)
{
//定义要找的函数原型
typedef int (*DLL_FUNC_ADD) (int,int);

//找到目标函数的地址
DLL_FUNC_ADD dll_func_add = (DLL_FUNC_ADD)GetProcAddress(handle,"Add");
if (dll_func_add)
{
//调用该函数
int result = dll_func_add(10,11);
printf("result:%d\n",result);
}
//卸载
FreeLibrary(handle);
}

return 0;
}

3.调用dll的项目属性->常规->字符集->使用多字节字符集。

Demo:百度云盘(13207134391)

    DLL_07

    DLL_07_APP

时间: 2024-10-16 22:45:40

手工加载DLL的相关文章

java 加载dll介绍(转)

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

无法加载 DLL“rasapi32.dll”: 动态链接库(DLL)初始化例程失败。的处理备注方案

网站提示   无法加载 DLL"rasapi32.dll": 动态链接库(DLL)初始化例程失败. (异常来自 HRESULT:0x8007045A). <system.net><defaultProxy><proxy usesystemdefault="false" /></defaultProxy></system.net> 初步怀疑是因为做了云加速服务造成的代理问题,自己瞎猜!反正应该管用

.Net常用技巧_动态加载Dll

原理如下: 1.利用反射进行动态加载和调用. Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名 2.加载dll后,需要使用dll中某类. Type type=ass.GetType(“TypeName”);//用类型的命名空间和名称获得类型 3.需要实例化类型,才可以使用

简单的C#动态加载dll并转换类型

可以通过该方法来实现程序插件化. 假设A,B两个类,A类为宿主,B类为插件需要加载到A类中: class Program { public interface IHellow { void Hellow(); } static void Main(string[] args) { Assembly ass = Assembly.LoadFrom("D:/xx.dll"); var wormMain = ass.GetTypes().FirstOrDefault(m => m.Ge

asp.net调用非托管dll,无法加载 DLL,找不到指定模块解决方法。

最近开发一个项目,里面用到了非.net开发的一个dll文件接口,发现发布到window2003服务器上后,运行网站总是提示 "无法加载 DLL"D:\11\1.dll": 找不到指定的模块. (异常来自 HRESULT:0x8007007E). "这个错误.但是我在本地xp系统上调试是可以的. dll使用com调用如下 [DllImport(@"D:\11\1.dll", EntryPoint = "aaa", CharSet

加载dll、lib库

2.是关于如何加载dll或lib库的.可以看这篇bog   Qt调用dll中的功能函数点击打开链接 **************************************************************************************************************************************************** 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有

C#加载dll 创建类对象

//加载dll 创建类对象string sqlightAssembly = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "system.data.sqlite.dll"); Assembly lib = Assembly.LoadFrom(sqlightAssembly); foreach (Type t in lib.GetExportedTypes()) { if(t.FullName == "System.Da

IIS无法加载 DLL解决办法

IIS提示 无法加载 DLL“OraOps12.dll”: 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.DllNotFoundException: 无法加载 DLL“OraOps12.dll”: 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 解决办法: 1. 复制相关dll到bin

ie8 不能加载dll的问题解决

请问是在打开IE的时候提示无法加载DLL文件吗? 请尝试重置IE: 1. 关闭所有Internet Explorer窗口. 2. 单击开始,点击运行,输入inetcpl.cpl,按回车. 3. 点击高级选项卡,点击重置,勾选删除个性化设置,点击重置. 4. 点击关闭