dll开发及调用
这段时间用到了dll的调用,这里总结下,也方便我以后使用。
一、生成dll(基于VS2010)
1、选择“Win32 Console Application”,建立工程;
2、向导中的“Application type”选择Dll,并在“Additional options”选项中勾选“Empty Project”;
3、点击“Finish”完成向导;
4、添加文件CallTest1.cpp,添加如下代码:
#include <windows.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } extern "C" _declspec(dllexport) int Max(int i1,int i2) { return (i1>i2)?i1:i2; }
5、编译生成dll文件;
二、C++调用dll(基于VS2010)
1、选择“Win32 Console Application”,建立工程;
2、向导中的“Application type”选择“Console Application”,并在“Additional options”选项中勾选“Empty Project”;
3、点击“Finish”完成向导;
4、添加文件dllCall.cpp,添加如下代码:
//dll的显式调用 #include <stdio.h> #include <windows.h> typedef int(*pMax)(int a,int b); void main(void) { HINSTANCE hDLL; pMax Max; hDLL=LoadLibrary("dllTest1.dll");//加载动态链接库文件; Max=(pMax)GetProcAddress(hDLL,"Max"); int a=Max(5,8); printf("比较的结果为%d\n",a); FreeLibrary(hDLL);//卸载文件; getchar(); }
5、进入工程的属性选项,选择“Use Multi-Byte Character Set”;
6、编译程序,将dllTest1.dll文件copy到和dllCall.exe同一目录并运行;
三、c#调用dll(基于VS2010)
1、选择“Console Application”,建立dllCallCS工程;
2、在Program.cs文件中添加如下代码: using System.Runtime.InteropServices;
3、导入dll文件: [DllImport("dllTest1.dll")] public static extern int Max(int i1, int i2); 4、添加测试代码:
int ret = Max(1, 2);
if (1 == ret)
Console.WriteLine("test");
else
Console.WriteLine("test2");
5、编译程序,将dllTest1.dll文件copy到和dllCallCS.exe同一目录并运行;
附Program.cs文件完整代码:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace dllCallCS { class Program { [DllImport("dllTest1.dll")] public static extern int Max(int i1, int i2); static void Main(string[] args) { int ret = Max(1, 2); if (1 == ret) Console.WriteLine("test"); else Console.WriteLine("test2"); } } }
四、Python调用dll(基于Python2.7)
1、建立文件dllCall3.py文件,填充如下代码:
from ctypes import * dll = CDLL("dllTest1.dll") print dll.Max(1, 3)
2、将dllTest1.dll文件复制到该目录,运行程序;
好,就这些了,希望对你有帮助。
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2013/20130107_dll开发及调用.md
欢迎补充
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 上周热点回顾(2.17-2.23)
2012-01-07 线程休眠代码(C++)
2012-01-07 VC6编译pjproject-1.12并生成python的pjsua