方法1:C#可以调用封装好的基于纯C的dll,但如果是C++的类,没有很简便的方法直接调用。使用方法:直接添加引用是不行的,使用DLLIMPORT。
2
方法2:把.dll放到exe程序所在的目录,在C#里声明,例如:[DllImport("DMC5480.dll", EntryPoint = "要调用的方法名", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] public static extern IntPtr 要调用的方法名();
3
方法3:使用 dllImport 导入。具体参数还需要看到底怎么使用。也就说,在 C++ 里面的函数除了签名之外,还需要参数契约。 比如:
[DllImport("filename.dll")]
UInt32 d5480_download_firmware(UInt16 card, string filename)
这要看你引用dll文件是什么文件,是单纯的类库还是外部或自定义控件dll文件。\x0d\x0a\x0d\x0a如果是类库dll文件,引用的步骤是这样的:在解决方案管理器中,选中要添加引用的项目或网站-右击-添加引用-选择要添加的dll文件路径-确定,即可添加到项目中。但是具体引用时还需要引用相关命名空间。\x0d\x0a\x0d\x0a如果是控件dll文件,可以右击工具箱-选择项(需要稍等一会)-出现选择工具箱项-浏览-选择要添加的dll文件,工具里面就会自动出现相关控件,使用时可以按照vs自带控件一样拖动或双击。\x0d\x0a\x0d\x0a至于是否需要注册,那要看dll文件本身了,有的需要注册,有的不需要,根据不同的dll文件注册方法有不同的。调用DLL有两种方法:静态调用和动态调用.(一).静态调用其步骤如下:
1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下
2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下
3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下
4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单
5.执行第4步后,VC将会d出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框中输入:youApp.lib
6.选择你的目标工程Head Files加入:youApp.h文件
7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include "youApp.h"
注:youApp是你DLL的工程名。
(二).动态调用其程序如下:
动态调用时只需做静态调用步骤1.
01 {
02 HINSTANCE hDllInst = LoadLibrary("youApp.DLL")
03 if(hDllInst)
04 {
05 typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD)
06 MYFUNC youFuntionNameAlias = NULL
07 // youFuntionNameAlias 函数别名
08 youFuntionNameAlias = (MYFUNC)GetProcAddress(hDllInst,"youFuntionName")
09 // youFuntionName 在DLL中声明的函数名
10 if(youFuntionNameAlias)
11 {
12 youFuntionNameAlias(param1,param2)
13 }
14 FreeLibrary(hDllInst)
15 }
16 }
显式(静态)调用:
LIB + DLL + .H,注意.H中dllexport改为dllimport
隐式(动态)调用:
DLL + 函数原型声明,先LoadLibrary,再GetProcAddress(即找到DLL中函数的地址),不用后FreeLibrary
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)