赞
踩
- #include "demoDll.h"
-
- int add(int a, int b) {
- return a + b;
- }
- #pragma once
-
- // extern "C" 是表示C语言代码,优点通常调用动态库不改变函数名
- // _declspec(dllexport) 导出函数
- extern "C" __declspec(dllexport) int add(int a, int b);
x86(Win32)、x64的区别:
x86(Win32)平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的;x64对应的则是64位的。
若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集...或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。反之,若主程序是由x64平台编译出来的,而dll是x86的呢?答案。。也是不行的!
在输出文件夹(Debug或Release)下可以找到新生成的demoDll.dll和demoDll.lib。
如何使用DLL工程生成的文件,参见下一节内容。
- #include <stdio.h>
- #include<Windows.h>
- int main()
- {
- HMODULE h = NULL;//创建一个句柄h
- h = LoadLibrary(L"demoDll.dll");
- if (h == NULL)//检测是否加载dll成功
- {
- printf("加载DLLTest1.dll动态库失败\n");
- return -1;
- }
-
-
- typedef int(*AddFunc)(int, int); // 定义函数指针类型
- AddFunc add;
- // 导出函数地址
- add = (AddFunc)GetProcAddress(h, "add");
-
-
- int sum = add(100, 200);
- printf("动态调用的结果%d\n", sum);
-
- return 0;
- }
代码输入完成以后,可以通过以下2种方法来运行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。