DLL函数接口说明
读卡接口rf_carddll.dll函数
![读卡接口rf_carddll.dll函数](https://img.taocdn.com/s3/m/c284cfd02cc58bd63086bd06.png)
参 数: incom : 连接读卡器的串口,分别表示COM1到COM4(1..4)
user_code : 用户代码
下载卡参数动态库ReadCardParam.dll函数说明
1.GetParam()aram(UserCode:pchar;CardKey : pchar) : integer
参 数: usercode : 返回用户代码
-10:金额错误 是负数
-15:读卡金额错误
说 明: 此函数用来从用户的卡中扣钱。
举 例: code=rf_WriteCard(1,'12345678','1122334455667788','123456',200);
-5:读卡错误;
5.WtBinCard(): 写卡
用 法: code=function WtBinCard(incom : integer;user_code :pchar;card_key : pchar;Card_id : pchar;send:pchar) : integer;
参 数: incom : 连接读卡器的串口,分别表示COM1到COM4(1..4)
user_code : 用户代码
card_key : 卡密钥
card_id : 返回卡的唯一序列号
rcvdata :返回的16字节的卡数据
返回值: 返回值如下
0: 成功,返回16字节的卡数据;
-1:连接串口错误;
-2:没有发现卡片;
-3:无法读取卡的唯一序列号;
-4:装入密钥错误;
科密高拍仪DLL接口说明
![科密高拍仪DLL接口说明](https://img.taocdn.com/s3/m/f4a6dad4cc1755270622082f.png)
DLL接口说明/*--------------------------------函数功能:获取设备数目返回值:设备数目------------------------------------*/extern "C" _declspec(dllexport) int GetDeviceCount();/*--------------------------------函数功能:获取设备名称参数一:摄像头索引,0 ->主摄像头,1 ->副摄像头参数二:设备名称返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int GetDeviceName(int index, char* nbuf);/*--------------------------------函数功能:获取设备的预览分辨率数目参数一:摄像头索引,0 ->主摄像头,1 ->副摄像头返回值:预览分辨率数目------------------------------------*/extern "C" _declspec(dllexport) int GetResolutionCount(int index);/*--------------------------------函数功能:获取指定索引的预览分辨率参数一:分辨率索引参数二:分辨率宽度参数三:分辨率高度返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int GetResolution(int R_index, int &width, int &height);/*--------------------------------函数功能:打开设备参数一:摄像头索引,0 ->主摄像头,1 ->副摄像头参数二:分辨率宽度参数三:分辨率高度参数四:显示句柄参数五:是否显示,true->显示,false ->不显示返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int OpenDevice(int index, int width, int height, HWND mhwnd, bool isDisplay);/*--------------------------------函数功能:关闭设备返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int CloseDevice();/*--------------------------------函数功能:拍照参数一:图像保存路径参数二:是否条码识别返回值:图像路径------------------------------------*/extern "C" _declspec(dllexport) char* CaptureFromPreview(char *path, int isBarCode)/*--------------------------------函数功能:设置图片保存格式参数一:图片格式:0 ->jpg,1 ->bmp,2 ->png,3 ->tif,4 ->pdf返回值:无------------------------------------*/extern "C" _declspec(dllexport) void SetFormatType(int type);/*--------------------------------函数功能:设置JPG格式图片质量参数一:图片质量值(范围1-100),值越大,图片质量越好返回值:无------------------------------------*/extern"C"_declspec(dllexport) void SetJpgQuality(int val);函数功能:设置色彩模式参数一:色彩模式:0 ->彩色,1 ->灰度,2 ->黑白返回值:无------------------------------------*/extern "C" _declspec(dllexport) void SetColorType(int type);/*--------------------------------函数功能:设置裁边方式参数一:裁边方式:0 ->不裁切,1 ->自动裁切返回值:无------------------------------------*/extern "C" _declspec(dllexport) void SetCutType(int type);/*--------------------------------函数功能:视频旋转参数一: 0 ->0度,1 ->90度,2 ->180度,3 ->270度返回值:无------------------------------------*/extern"C"_declspec(dllexport) void SetRotateAngle(int angle);/*--------------------------------函数功能:实际大小参数:无返回值:无------------------------------------*/extern"C"_declspec(dllexport) void TrueSize(void);/*--------------------------------函数功能:适合大小参数:无返回值:无------------------------------------*/extern"C"_declspec(dllexport) void BestSize(void);/*--------------------------------函数功能:放大参数:无返回值:无------------------------------------*/extern"C"_declspec(dllexport) void ZoomIn(void);函数功能:缩小参数:无返回值:无------------------------------------*/extern"C"_declspec(dllexport) void ZoomOut(void);/*--------------------------------函数功能:去底色参数一: 0 ->不去底色,1 ->去底色返回值:无------------------------------------*/extern"C"_declspec(dllexport) void SetDelBgColor(int flag);/*--------------------------------函数功能:去黑边参数一: 0 ->不去黑边,1 ->去黑边返回值:无------------------------------------*/extern"C"_declspec(dllexport) void SetDelBlackEdge(int flag);/*--------------------------------函数功能:对焦参数: 0 ->不去黑边,1 ->去黑边返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int ManualFocus();/*--------------------------------函数功能:条码二维码识别参数一: 0 ->识别条码,1 ->识别二维码参数二:识别结果返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int RecogQrBarCode(int type,char * result);/*--------------------------------函数功能:设置DPI参数一: 0 ->默认DPI,1 ->自定义DPI参数二: DPI值返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) void SetDpi(int type, int val);/*--------------------------------函数功能:添加要合并的图片路径参数一:图片路径返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int AddImagePath(char* path);/*--------------------------------函数功能:图片合并(与函数AddImagePath配合使用,最多支持四张图片的合并)参数一:图片合并的路径参数二:合并方向:0->垂直合并,0->水平合并参数三:合并图片之间的间隙返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int MergeImages(char* desPath, int direction,int sp);/*--------------------------------函数功能:添加要合并PDF的文件路径参数一:文件路径返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int AddImageFileToPDF(char* path);/*--------------------------------函数功能:合并PDF与函数AddImageFileToPDF配合使用)参数一: PDF合并路径返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int CombineToPDF(char* desPath);/*--------------------------------函数功能:硬件参数设置参数:无返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int ShowCameraSettingWindow(void);/*--------------------------------函数功能:获取视频参数参数一:视频参数ID:亮度= 0,对比度= 1,色调= 2饱和度= 3清晰度= 4伽玛= 5白平衡= 7增益= 9参数二:获取参数的最小值参数三:获取参数的最大值参数四:获取参数的默认值参数五:获取参数的当前值返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int GetVideoProcParms(int ParmID,long &min, long &max, long &def, long ¤t) ;/*--------------------------------函数功能:设置视频参数参数一:视频参数ID:亮度= 0,对比度= 1,色调= 2饱和度= 3清晰度= 4伽玛= 5白平衡= 7增益= 9参数二:设置值返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int SetVideoProcParms(int ParmID, int value);/*--------------------------------函数功能:获取相机控制参数参数一:控制参数ID:Pan = 0,Tilt = 1,Roll = 2,Zoom = 3,Exposure = 4Iris = 5,Focus = 6参数二:获取参数的最小值参数三:获取参数的最大值参数四:获取参数的默认值参数五:获取参数的当前值参数六:获取参数的控制方式(0 ->手动,其他 ->自动)返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int GetCameraCotrolParms(int ParmID,long &min, long &max, long &def, long ¤t, long &flag);/*--------------------------------函数功能:设置相机控制参数参数一:视频参数ID:Pan = 0,Tilt = 1,Roll = 2,Zoom = 3,Exposure = 4Iris = 5,Focus = 6参数二:设置值参数三:控制方式(0 ->手动设置,1 ->自动设置)返回值:0 ->成功,其他->失败------------------------------------*/extern"C"_declspec(dllexport) int SetCameraCotrolParms(int ParmID,int value, int flag);/*--------------------------------函数功能:读取身份证参数:无返回值:0 ->成功,其他->失败------------------------------------*/extern"C"__declspec(dllexport) int ReadCard();/*--------------------------------函数功能:获取身份证信息参数一:信息索引值0->名字1->性别2->民族3->出生日期4->住址5->身份证号码6->签发机关7->开始有效日期8->结束有效日期9->头像照片文件路径返回值:身份证信息------------------------------------*/extern"C"__declspec(dllexport) char* GeCardInfo(int index);/*****************************1600W像素及以上机型接口***********************//*--------------------------------函数功能:获取设备的拍照分辨率数目参数一:摄像头索引,0 ->主摄像头,1 ->副摄像头返回值:预览分辨率数目------------------------------------*/extern "C" _declspec(dllexport) int GetStillResolutionCount(int index);/*--------------------------------函数功能:获取指定索引的拍照分辨率参数一:分辨率索引参数二:分辨率宽度参数三:分辨率高度返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int GetStillResolution(int R_index, int &width, int &height);/*--------------------------------函数功能:打开设备参数一:摄像头索引,0 ->主摄像头,1 ->副摄像头参数二:分辨率宽度参数三:分辨率高度参数四:显示句柄参数五:是否显示,true->显示,false ->不显示返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int OpenDeviceEx(int index, int width, int height, HWND mhwnd, bool isDisplay);/*--------------------------------函数功能:拍照参数一:图像保存路径返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int CaptureFromStill(char *path)/*****************************纯录音播放接口***********************/ /*--------------------------------函数功能:开始录音参数一:录音保存路径(录音格式后缀为.wav)返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int StartAudioRecord(char *path)/*--------------------------------函数功能:停止录音参数:无返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int StopAudioRecord()/*--------------------------------函数功能:播放录音参数一:录音文件路径返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int StartPlayAudio(char *path)/*--------------------------------函数功能:停止播放录音参数:无返回值:0 ->成功,其他->失败------------------------------------*/extern "C" _declspec(dllexport) int StopPlayAudio()。
车牌自动识别器DLL接口说明
![车牌自动识别器DLL接口说明](https://img.taocdn.com/s3/m/a6eb33bbf61fb7360b4c657f.png)
车牌识别系统DLL软件开发对外接口使用说明书目录第一章HVDLL.dll接口概述 (2)第二章对外接口函数详细说明 (3)1. 单个设备连接接口函数 (3)1.1. OpenHv (3)1.2. CloseHv (3)1.3. CloseIP (4)1.4. HvIsConnected (4)1.5. SetHvCallBack (4)1.6. CARINFO_BEGIN_CALLBACK (5)1.7. CARINFO_ END _CALLBACK (5)1.8. PLATE_NO_CALLBACK (5)1.9. BIG_IMAGE_CALLBACK (6)1.10. SMALL_IMAGE_CALLBACK (7)1.11. BINARY _IMAGE_CALLBACK (7)1.12. VIDEO _CALLBACK (8)1.13. VIDEO _ HISTORY_CALLBACK (8)1.14. STREAM_CALLBACK (9)1.15. DEBUG_STR_CALLBACK (10)1.16. SearchHVDeviceCount (10)1.17. GetHVDeviceAddr (10)1.18. SetHvIPFromMac (11)1.19. Yuv2Rgb (11)1.20. Yuv2BMP (11)1.21. Yuv2Jpg (12)1.22. HV_ForceSend (12)1.23. HV_ForceSendEx (13)1.24. HV_ GetPlateInfo (13)1.25. HV_ ProcessUserData (13)1.26. HV_ GetHistoryVideo (14)1.27. HV_CombineTwoImagesToOneImage (14)1.28. HV_AntiTamper_Embed (15)1.29. HV_AntiTamper_Examine (15)1.30. SendTriggerOut (16)1.31. SetHvTime (16)1.32. GetHvTime (16)2. 视频检测器接口函数 (17)2.1. TRIGGERINFO_CALLBACK (17)2.2. HV_GetStatInfo (17)3. 主动连接接口函数 (18)3.1. OpenHvServer (18)3.2. CloseHvServer (18)3.3. CONNECT_EVENT (18)3.4. DISCONNECT_EVENT (19)3.5. SetHvServerEvent (19)第三章应用系统开发说明 (19)第四章HVDLL编程指南 (23)1 编写回调函数 (23)2 创建句柄 (23)3 设置回调 (23)4 Timer事件 (24)5 取消回调 (24)6 关闭句柄 (25)HVDLL.dll接口概述HVDLL.dll是我公司车牌识别系统的核心接口,负责从识别器接收识别结果和视频信息,是各种接收应用程序的底层接口。
怎么破解Dll文件,从中找出里面的函数和参数
![怎么破解Dll文件,从中找出里面的函数和参数](https://img.taocdn.com/s3/m/735bd2136edb6f1aff001f6f.png)
:10001019 0FAF742410 imul esi, dword ptr [esp+10]
:1000101E 85C0 test eax, eax
还有一种调用方式:
有于该函数比较简单,没有参数的压栈过程,
里面的
esp+04就是第一个参数
esp+08就是第二个参数
。。。
esp+xx就是第xx/4个参数
你说看到的xx的最大数除以4后的结果,就是该函数所传递的参数的个数。
----------------------------------------------
1。先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。它可以直接定位到该函数。
2。看准该函数的入口,一般函数是以以下代码作为入口点的。
push ebp
mov ebp, esp
...
3。然后往下找到该函数的出口,一般函数出口有以下语句。
...
ret xxxx;//其中xxxx就是函数差数的所有的字节数,为4的倍数,xxxx除以4得到的结果
如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。
另外由于编译器的优化原因,可能有的参数没有我前面说的那么简单。如果在该DLL的某个函数中,有关于API调用的话,
并且调用API的参数整好有一个或多个是该DLL函数的参数的话。那么就可以很容易的知道该DLL函数的参数了。
:1000102A 6A63 push 00000000
user32.dll 函数说明
![user32.dll 函数说明](https://img.taocdn.com/s3/m/50ae3468856a561253d36f0f.png)
函数名称说明ActiveKeyboardLayout激活一个不同的键盘布局,该布局必须先由LoadKeyBoardLayout函数装载AdjustWindowRect根据希望的用户矩形大小来计算所需矩形窗口的大小,然后将该窗口矩形给CreateWindow函数,以创建所需的窗口AdjustWindowRectEx根据希望的客户矩形大小来计算具有扩展式样的窗口所需的矩形窗口大小,然后将该窗口矩形传给CreateWindow函数,以创建所需AnyPopupAppendMenuArrangeIconicWindowsAttachThreadInputBeginDeferWindowPosBeginPaintBringWindowToTopBroadcastSystemMessageCallMsgFilterCallNextHookExCallWindowProcCascadeWindowsChangeClipBoardChainChangeDisplaySettingsCharLowerCharLowerBuffCharNextCharNextExACharPrevCharPrevExACharToOemCharToOemBuff的窗口确定屏幕上是否存在未被拥有的、可见的、顶层弹出式或重叠式窗口在给定菜单的尾不增加新项在给定父窗口中安排最小化的子窗口将只线程的输入状态附加到其它线程上创建多窗口位置的数据结构,并为该结构返回一个句柄为绘图准备一个窗口将给定窗口放到屏幕Z序顶部发送一条消息给指定的接受器,这个接受器可被用于可安装驱动器、基于WINDOWS的网络驱动器、系统级设备驱动器或任何这些部件的组合将指定的消息和钩子代码传送给应用程序定义的回调函数,以便应用程序能够在对话框、消息框、菜单和滚动条进行内部处理或按ALT+TAB键激活另一窗口时,检查和控制消息流将给定的钩子信息传递给当前钩子链的下一个钩子过程将给定的消息传递给指定的窗口过程级联指定父窗口的指定窗口或子窗口从剪贴板查看程序链中去掉一个窗口改变指定图形模式的显示环境将一个字符或字符串转换成小写将字符串缓冲区内指定数目的字符转换成小写返回指向字符串中某字符的下一个字符的指针检取字符串中下个字符的指针返回字符串中某个字符的前一个字符的指针检取字符串中某个字符的前一个字符的指针将指定字符串转换到OEM定义的字符集中将字符串缓冲区中指定数目的字符转换成OEM定义的字符集中CharUpper将一个字符后字符串转换成大写CharUpperBuff将字符缓冲区中指定数目的字符转换成大写CheckDlgButton 通过对话框按扭改变一个选择标记CheckMenuItem通过菜单项改变一个选择标记CheckMenuRadioItem核对指定菜单项并作标记,同时去掉该组中其它菜单项的标记CheckRadioButton向组中给定圆按扭增加一个选择标志,并去掉该组中其它圆按扭的选择标志ChildWindowFromPointChildWindowFromPointExClintToScreenClipCursorCloseClipBoardCloseDesktopCloseWindowCloseWindowStationCopyAcceleratorTableCopyIconCopyImageCopyRectCountClipboardFormatsCreateAcceleratorTableCreateCartCreateCursorCreateDesktopCreateDialogIndirectParamCreateDialotParamCreateIconCreateIconFromResource CreateIconFromResourceExCreateIconIndirectCreateMDIWindowCreateMenuCreatePopupMenuCreateWindowExCreateWindowstationDdeAbandonTransaction确定包含给定点的子窗口确定包含给定点的子窗口将给定的用户坐标转换成屏幕坐标将光标限定在屏幕上给定的矩形区域内关闭剪贴板,以允许其它窗口访问该剪贴板关闭指定桌面对象的句柄最小化指定的窗口关闭一个打开的窗口站句柄拷贝指定的加速键表拷贝一个图标建立一个图象并拷贝指定图象的属性给它拷贝一个矩形坐标返回剪贴板当前不同数据格式的数目创建一个加速键表为系统插入符创建一个新形状,并且为给定窗口分配这个插入符的所有权用指定大小、位模式、热点创建一个光标在和调用过程相关的窗口站上创建一个新桌面从内存对话框模板中创建一个无模式对话框从对话框模板资源中创建一个无模式对话框用指定大小、颜色和位模式创建一个图标从描述图标的资源位中创建一个图标或光标从描述图标的资源位中创建一个图标或光标根据ICONINFO数据结构创建一个图标或光标创建一个多文档界面窗口创建一个菜单,然后用AppendMenu函数填充菜单项创建一个弹出式窗口,然后用AppendMenu函数填充菜单项用指定方式创建一个窗口创建一个窗口站对象。
DLL(动态链接库)详解
![DLL(动态链接库)详解](https://img.taocdn.com/s3/m/7b3a97d87f1922791688e826.png)
DLL (动态链接库)详解动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于一个DLL 中,该DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL 还有助于共享数据和资源。
多个应用程序可同时访问内存中单个DLL 副本的内容。
DLL 是一个包含可由多个程序同时使用的代码和数据的库。
目录定义DLL 的优点DLL文件损坏DLL 依赖项导出DLL 函数DLL错误的危害DLL修复方法定义DLL 的优点DLL文件损坏DLL 依赖项导出DLL 函数DLL错误的危害DLL修复方法展开定义通过使用DLL,程序可以实现模块化,由相对独立的组件组成。
例如,一个计帐程序可以按模块来销售。
可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。
因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。
此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
例如,您有一个大型网络游戏,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库(DLL)中,您无需重新生成或安装整个程序就可以应用更新。
下表说明了Windows 操作系统中的一些作为DLL 实现的文件:•ActiveX 控件(.ocx) 文件ActiveX 控件的一个示例是日历控件,它使您可以从日历中选择日期。
•控制面板(.cpl) 文件.cpl 文件的一个示例是位于控制面板中的项。
每个项都是一个专用DLL。
•设备驱动程序(.drv) 文件设备驱动程序的一个示例是控制打印到打印机的打印机驱动程序。
DLL 的优点1、扩展了应用程序的特性;2、可以用许多种编程语言来编写;3、简化了软件项目的管理;4、有助于节省内存;5、有助于资源共享;6、有助于应用程序的本地化;7、有助于解决平台差异;8、可以用于一些特殊的目的。
通达信DLL函数编程规范
![通达信DLL函数编程规范](https://img.taocdn.com/s3/m/3b6101bd8bd63186bdebbc19.png)
通达信DLL函数编程规范文档记录:版本时间修改者描述1.00 2014-05-23 新修订用户可以自己编写公式函数dll载入通达信客户端,用户dll必须遵循通达信接口规范。
(请参考示范程序TestPluginTCale)DLL函数结构1.通达信提供了PluginTCalcFunc.h头文件。
2.包括注册DLL函数基本信息。
注册函数名称为RegisterTdxFunc。
具体函数实例可参见TCalcFuncSets.cpp示范程序。
自编实现细节说明PluginTCalcFunc.h头文件中PluginTCalcFuncInfo结构用来存放用户自己的函数pCallFunc和函数唯一标记nFuncMark;pCallFunc是typedef void(*pPluginFUNC)( int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)类型指针;函数参数分别是(数据个数,输出,输入a,输入b,输入c),参数的计算是基于长度为DataLen 的float类型数组。
RegisterTdxFunc函数为注册函数,用户的函数全部都放入PluginTCalcFuncInfo结构的全局数组g_CalcFuncSets中。
函数dll的使用将生成的dll文件拷贝到主程序的\T0002\dlls目录下(如果没有此目录,请人工建立,如果该dll有关联文件,请一并拷贝过去)主程序进入后,ctrl+F打开公式管理器,点击“DLL函数”按钮。
如上图:第二号DLL绑定了TestPluginTCale.dll在指标公式编辑器中就可以用TDXDLL2第二号DLL函数了。
TDXDLL2(1,H,C,C)含义:调用第二号DLL中标记为1的函数,此函数接受四个输入参数,其中第一个参数用于标记调用DLL中哪个函数。
DLL函数接口说明
![DLL函数接口说明](https://img.taocdn.com/s3/m/5e4918bc6aec0975f46527d3240c844769eaa064.png)
DLL函数接口说明typedef void __stdcall (*fun_AddResult)(char pDataStr[10][255],double pDataDouble[100]); extern "C" void __declspec(dllimport) __stdcall SetBackColor(TColor pBkColor);extern "C" void __declspec(dllimport) __stdcall FanSelect(void *pSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSeriesNameCount,//系列名称个数,-1时表示全部选择void *pSubSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSubSeriesNameCount,//子系列名称个数,-1时表示全部选择const double &pFlow, //风量const int &pFlowUnitType, //风量单位类型0-m^3/h 1-m^3/s 2-l/s 3-cfmconst double &pPres, //风压const int &pPresUnitType, //风压单位类型0-Pa 1-mmH2O 2-kgf/cm^2 3-inH2Oconst int &pPresType, //风压类型0-全压1-静压const int &pOutFanType,//出风方式0-管道出风1-自由出风const double &pAirDensity,//空气密度const double &pMotorSafeCoff,//电机容量安全系数(%)const bool &pUserSetMotorSafeCoff,//用户设定了电机容量安全系数double &rFlow_STDUnit,//标准单位下的风量fun_AddResult pAddResult//函数指针,用于回传数据);extern "C" void __declspec(dllimport) __stdcall Belt_Selection(const char *pSeriesName,const char *pSubTypeName,const char *pModelName,const int &pSped_DataType,//电机转速类型0-标准数据1-用户数据默认为0(界面选择)const int &pHz_DataType,//频率选择0-50HZ 1-60HZ(界面选择)const int &pRotation,//出风旋转角度R0,R90,R180,R270(参考常量定义)const double &pFanSped,//风机转速(第一步计算得到)const double &pMotorPow,//电机功率(第一步计算得到)const double &pFlow_STDUnit,//标准单位下的风量const double &pTPres,//全压(第一步计算得到)const double &pSPres,//静压(第一步计算得到)const double &pFTEff,//全压内效率(第一步计算得到)const double &pSdbA,//噪声(第一步计算得到)const int &pV olt,//用户选择的电压(参考电压常量声明V380 V400) ,bool pPole[4],//用户选择的极数2,4,6,8bool pBeltType[4],//用户选择的皮带类型SPZ SPA SPB SPCconst bool &pBeSetFanSped,//用户设定了风机转速const double &pFanSpedRt_User,//用户设定的风机转速差const bool &pBeSetBeltMoveSped,//用户设定最大皮带运动速度const double &pBeltMoveSped_User,//用户设定的最大皮带运动速度const int &pUserSel_Distance,//用户的选择0-直接输入中心距(mm) 1-边距(mm)const double &pMargin,//边距(mm)const double &pCenterDistance,//中心距const double &pMotorSafeCof,//电机容量安全系数const bool &pUserSetMotorSafeCoff,//用户设定了电机容量安全系数const double &pFlow_STDSped,//标准转速下的风量(第一步选型结果,下标为46)const double &pMinL10,//轴承最小寿命fun_AddResult pAddResult//函数指针,用于回传数据);extern "C" double __declspec(dllimport) __stdcall CalAirDensity(const double &pB,//大气压力const double &pT,//空气温度const double &pV//相对湿度);extern "C" void __declspec(dllimport) __stdcall DrawCurvePic(const char *pSeriesName,const char *pSubTypeName,const char *pModelName,const char *pFileName,const double &pFlow,const double &pPres,const int &pWidth,const int &pHeight);//画皮带传动风机单转速曲线图extern "C" void __declspec(dllimport) __stdcall DrawSingleFanBySize(const char *pSeriesName,//系列名称const char *pSubTypeName,//子系列名称const char *pModelName,//型号名称const char *pFileName,//文件名称double pSped,//转速double pFlow,//风量(流量)double pDensity,//密度const int &pWidth,//图片宽度const int &pHeight,//图片高度const int &pFlowUnit,//风量单位const int &pPresUnit//风压单位);//画直联风机单转速曲线图extern "C" void __declspec(dllimport) __stdcall DrawDrectSingleFanBySize( const char *pSeriesName,//系列名称const char *pModelName,//型号名称const char *pMotorName,//电机名称const char *pFileName,//文件名称const double &pFlow,//风量(流量) 标准单位const int &pWidth,const int &pHeight,const int &pFlowUnit,//用户选择的风量单位0-标准单位const int &pPresUnit//用户选择的风压单位0-标准单位);extern "C" void __declspec(dllimport) __stdcall DirectFanSelect(void *pSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSeriesNameCount,//系列名称个数,-1时表示全部选择double &pFlow, //风量const int &pFlowUnitType, //风量单位类型0-m^3/h 1-m^3/s 2-l/s 3-cfmdouble &pPres, //风压const int &pPresUnitType, //风压单位类型0-Pa 1-mmH2O 2-kgf/cm^2 3-inH2O const int &pPresType,//风压类型0-全压1-静压const int &pHz_DataType,//频率选择0-50HZ 1-60HZconst int &pvoltage,//电压0-380 1-220const double &pResultDisData, //选型差值(小数0.1代表10%) const double &pAirDensity,//空气密度fun_AddResult pAddResult//函数指针,用于回传数据);。
Lame-Enc DLL 接口函数说明
![Lame-Enc DLL 接口函数说明](https://img.taocdn.com/s3/m/a5f81e4769eae009581becf0.png)
dwConfig Specifies what kind of output you want. Since only MP3 currently is supportedyou must set this to BE_CONFIG_LAMEformat.LHV1.dwStructVersion Indicates the version number of the structure, current version number is 1 format.LHV1.dwStructSize Specifies the size of the BE_CONFIG structure (currently 331 bytes)format.LHV1.dwSampleRate Samplerate in Hz for MP3 file. This can be set to either: 32000, 44100 or 48000 for MPEG-I16000, 22050 or 24000 for MPEG-I8000, 11025 or 12000 for MPEG-II.5format.LHV1.dwReSampleRate Specifies to which sample rate the input stream has to be resampled, if set to 0,the encoder will decide which ReSample rate to useformat.LHV1.nMode Stereomode for MP3 file. This can be either BE_MP3_MODE_STEREO, BE_MP3_MODE_JSTEREO, BE_MP3_MODE_DUALCHANNEL orBE_MP3_MODE_MONO.format.LHV1.dwBitrate For CBR, this specifies the actual bitrate, for VBR, it specifies the minimum bitrate Allowed bitrates are: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320.for MPEG-IAllowed bitrates are: 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144 and 160.for MPEG-IIformat.LHV1.dwMaxBitrate For CBR this setting is ignored, when using VBR, it specifies the maximum bitrateformat.LHV1.nPreset The quality option can be set to one of the following presets: NOPRESET,PHONE,SW,AM,FM,VOICE,RADIO,TAPE,HIFI,CD,STUDIO as defined in the LAME_QUALTIY_PRESET. Keep in mind that the presets can overwrite some of the other settings, since it is called right before the encoder is initializedformat.LHV1.bCopyright If this is set to TRUE the Copyright bit in the MP3 stream will be set. format.LHV1.bCRC Set this to TRUE in order to enable CRC-checksum in the bitstream. format.LHV1.bOriginal If this is set to TRUE the Original bit in the MP3 stream will be set. format.LHV1.bPrivate If this is set to TRUE the Private bit in the MP3 stream will be set.format.LHV1.bWriteVBRHeader Sepecifes if the a XING VBR header should be written or not. When this option is enabled, you have to call the beWriteVBRHeader function when encoding has been completedformat.LHV1.bEnableVBR Specifies if VBR encoding option shall be used or not, possible values areTRUE/FALSEformat.LHV1.nVBRQuality Quality option if VBR is enabled (0=highest quality, 9 is lowest quality)format.LHV1.dwVbrAbr_bps If the Average Bit Rate is specified, the lame encoder ignores the nVBRQualitysettings。
易语言中调用DLL使用说明
![易语言中调用DLL使用说明](https://img.taocdn.com/s3/m/50eaa7e6fab069dc502201a4.png)
易语言中调用DLL使用说明基本说明本文所描述的部分功能需易语言4.01或以上版本支持。
“在易语言中调用DLL”包含两方面的内容:调用Windows系统API函数;调用普通DLL函数。
下文用到的“调用API”或“调用DLL”等字眼,除非特别注明,一般都是指以上两方面之一或之和,视上下文而定。
绝大多数情况下,无需明确区分调用的是系统API还是普通DLL。
目前易语言只支持以stdcall方式调用DLL中的导出函数。
Windows系统API一般都是以stdcall调用方式导出的,故在易语言中调用它们时通常不必考虑函数调用方式的问题。
而普通DLL有可能导出“非stdcall调用方式”(比如cdecl)的函数,调用时需要特别注意。
一般而言,考虑到通用性,DLL开发者都会选择导出以sdtcall方式调用的函数。
(支持生成DLL的编程语言通常都支持导出stdcall调用方式的函数,具体实现请参考各编程语言手册。
)易语言编译生成的DLL,其导出函数全部为stdcall调用方式,所以在易语言中调用易语言生成的DLL不存在问题。
目前在易语言中调用DLL时只支持1字节对齐的结构(自定义数据类型)如果DLL命令的某个参数或参数的某个成员是结构类型(自定义数据类型),则其对齐方式必须是1字节对齐。
Windows系统API中所用到的结构都是1字节对齐的,故在调用API时不受此限制。
但如果想用其它编程语言生成DLL供易语言调用且数据类型中包含了1或2字节数据长度的成员(如字符型或短整数),就需要考虑结构的1字节对齐。
在Delphi中,可以这样定义1字节对齐的结构(结构在Delphi中称为record):在其它编程语言或编译器中的定义方式请参考各自的编程手册。
目前易语言支持调用任意复杂的DLL命令只要满足了前面的两个条件——调用方式为stdcall,参数结构为1字节对齐——易语言支持调用任意复杂的DLL命令:参数除了可以是基本数据类型或普通结构类型外,还可以是基本类型地址或基本类型数组,也可以是结构类型地址或结构类型数组,结构类型的成员中还可以包含任意数量和任意层次的其它结构、结构地址、结构数组,等等。
DLL使用介绍范文
![DLL使用介绍范文](https://img.taocdn.com/s3/m/2e5e37f3c67da26925c52cc58bd63186bceb92b7.png)
DLL使用介绍范文动态链接库(Dynamic Link Library,简称DLL)是一种Microsoft Windows操作系统中常用的文件类型,它包含可被程序调用执行的代码和数据。
DLL文件能够提供程序员在开发和编写应用程序时的便利性,通过将常用的功能和代码存储在DLL文件中,可以提高代码的复用性和可维护性,并且减少了程序的体积,减少了编译时间。
使用DLL文件可以将相同的代码抽象出来,形成一个独立的模块,供其他程序调用。
这种模块化的设计让程序更容易维护和管理,同时也有助于提高程序的性能和效率。
在开发过程中,DLL文件可以被多个应用程序共享,从而避免了重复编写相同的代码,提高了开发效率。
DLL文件的使用不仅可以提高程序的可维护性和扩展性,还可以加快程序的启动速度和运行速度。
由于DLL文件是在程序运行时加载到内存中的,因此程序启动时不需要加载所有的代码,只需要加载必要的部分,这可以加快程序的启动速度。
另外,由于DLL文件可以在内存中共享,多个程序可以同时使用同一个DLL文件,降低了内存的占用,提高了程序的运行速度。
在实际应用中,使用DLL文件可以实现插件式的架构设计,允许应用程序的功能可以通过添加或删除DLL文件来进行扩展或删减。
这种设计方式使应用程序的功能更加灵活和可扩展,可以根据需求动态加载和卸载DLL文件,实现功能的动态更新和升级。
除了以上提到的优点外,DLL文件还可以实现一些高级的功能,比如实现程序的多语言支持,可以在DLL文件中存储不同语言版本的字符串,根据需要加载对应的字符串资源;还可以实现程序的加密保护,将一些敏感的代码和数据存储在DLL文件中,通过加密算法进行保护,提高程序的安全性。
总的来说,DLL文件是一种非常有用的程序组件,可以帮助程序员提高代码的复用性和可维护性,加快程序的启动速度和运行速度,实现程序的模块化设计和插件式架构,为程序的开发和维护带来很大的便利。
因此,在实际开发中,合理地使用DLL文件是非常重要和必要的。
Adawin CAN计算机接口卡通用DLL函数库应用手册V1.5
![Adawin CAN计算机接口卡通用DLL函数库应用手册V1.5](https://img.taocdn.com/s3/m/3b637e6d561252d380eb6e97.png)
UINTuTimeFlag; BYTE BYTE BYTE BYTE UINT BYTE nSendType; bRemoteFlag; bExternFlag; nDataLen; uID; arryData[8];
}CAN_DataFrame,*PCAN_DataFrame;
1.1.4
CAN_InitConfig
CAN_E_DEVICEOPENED CAN_E_DEVICEOPEN CAN_E_DEVICENOTOPEN CAN_E_BUFFEROVERFLOW CAN_E_DEVICENOTEXIST CAN_E_LOADKERNELDLL CAN_E_CMDFAILED
= 0x0100, = 0x0200, = 0x0400, = 0x0800, = 0x1000, = 0x2000, = 0x4000,
1.1.3
CAN_DataFrame
描述:CAN 数据帧结构体,在发送和接收时存放数据帧的结构体定义。
//CAN 数据帧类型 typedef struct tagCAN_DataFrame{ // 时间标识,对接收帧有效,从 CAN 通道启动开始计时 // 发送帧类型,0-正常发送;1-单次发送;2-自发自收;3-单次自发自收 // 是否是远程帧,0 表示数据帧,1 表示远程帧 // 是否是扩展帧,0 表示标准帧,1 表示扩展帧 // 数据长度(<=8),也就是 arryData 的长度 // 报文 DI // 报文数据
= 2
1.1.2
CAN_ErrorCode
描述:错误码类别定义。
enum CAN_ErrorCode { //CAN 错误码 CAN_E_NOERROR CAN_E_OVERFLOW CAN_E_ERRORALARM CAN_E_PASSIVE CAN_E_LOSE CAN_E_BUSERROR = 0x0000, = 0x0001, = 0x0002, = 0x0004, = 0x0008, = 0x0010, // 没有发现错误 // CAN 控制器内部 FIFO 溢出 // CAN 控制器错误报警 // CAN 控制器消极错误 // CAN 控制器仲裁丢失 // CAN 控制器总线错误
dllimport用法
![dllimport用法](https://img.taocdn.com/s3/m/46510a21f68a6529647d27284b73f242336c3185.png)
dllimport用法dllimportWindows操作系统下的C/C++应用程序接口(ApplicationProgrammingInterface,API),它允许程序员从动态链接库(Dynamic Link Library,DLL)中调用函数。
它的使用可以有效的提高软件的效率,并有利于开发管理。
下面从dllimport的用法介绍一下dllimport的用法:一、dllimport本语法主要有两种用法:1.t带有函数参数定义的Dllimport__declspec(dllimport)可以用来告诉编译器指定函数从指定的DLL加载。
该语法格式如下:__declspec(dllimport) returnTypeFunctionName(ArgumentList);其中returnType是函数的返回类型,FunctionName是函数名,ArgumentList是一系列参数,其中可以包含参数的数量和类型,它可以为空,注意里面的括号要加上,即使参数为空,也要加上括号。
2.t仅仅__declspec(dllimport)__declspec(dllimport)允许程序员以编译器安全的方式加载任意的DLL文件,只要指定正确的路径和文件名,就可以使用__declspec(dllimport)来指定一个DLL文件,而不需要任何函数的参数定义,该语法格式如下:__declspec(dllimport) LibraryNameLibraryName是DLL文件的名称,可以不带文件后缀名,也可以带.dll文件后缀名。
二、使用 dllimport要使用dllimport,只需要在头文件中使用__declspec(dllimport)定义,即可从DLL文件中调用函数,其用法可以归纳为以下几步:1.t检查系统中是否已经有对应的dll文件,如果没有则需要安装该dll文件;2.t在需要调用dll文件的头文件中,使用__declspec(dllimport)指定DLL文件;3.t编译源文件,调用DLL文件中的函数;4.t链接生成运行文件。
Labview调用DLL时接口类型匹配简介
![Labview调用DLL时接口类型匹配简介](https://img.taocdn.com/s3/m/5329e73e31126edb6f1a1028.png)
调用DLL时接口类型匹配简介1、数值类型Data type:选择数值的类型。
Pass:选择采用传值方式还是传引用方式。
2、布尔类型a. 方法一:使用数值类型作为输入输出。
在连接输入的时候将布尔值转换为数值。
在输出的时候使用判断是否等于0来获取布尔值。
b. 方法二:类型中选择“Adapt to Type”(匹配至类型),数据格式选择“Handles by Value”。
在程序中,直接接入布尔数据,接线端会自动变为布尔类型。
3、字符串类型由于需要为字符串分配内存空间,对于字符串输出,需要为其在输入的一端接入初始字符串。
当初始字符串长度不够时,程序会因为内存内存越界而出错。
4、一维数值数组a. 当生成dll的时候采用“Array Data Pointer”时,参数中会自动增加一个“len”的数值参数:在“Length Input”中会默认设置为此参数值,用以表示数组的长度。
在调用此dll时,对于数组类型,在“Array format”中设置为Array Data Pointer。
同时需要将数组的长度值接至len端上:b. 当生成dll的时候采用“Array Handle Pointer”时,这时输入输出对应的是指向句柄的指针,可执行系统级的操作。
程序可以自动获取数组的长度,所以将不会有“len”参数出现。
在调用此dll时,在“Array format”中选择Array Handle Pointer即可。
在程序中不再需要为数组指定长度。
5、二维数值数组当参数为二维数值数组的时候,在LabVIEW下生成dll时类型只能选择为指向句柄的指针。
调用的方法与4.b类似,只需将“Dimensions”设置为2即可:6、不包含数组的簇数据类型设置为“Adapt to Type”,数据格式设置为“Handles by Value”。
将簇直接接入即可。
7、包含数组的簇、调用方法与调用一维数组类似。
a. 当参数类型为句柄时(一般情况下这种dll是不能使用LabVIEW生成的),在调用dll 的时候,类型设置与不含数组的簇一样:由于需要为这种簇分配内存空间,所以需要将簇的输出接入对应的数据:b. 当参数类型为指向句柄的指针时,将数据格式设置为“Pointers to Handles”。
delphidll函数调用方法
![delphidll函数调用方法](https://img.taocdn.com/s3/m/6de22b08f011f18583d049649b6648d7c1c708cb.png)
delphidll函数调用方法Delphi是一种高级编程语言,用于开发Windows操作系统上的应用程序。
它具有强大的功能,可以创建各种类型的应用程序,包括动态链接库(DLL)。
DLL是一个包含可执行代码和数据的文件,它可以由多个应用程序同时使用。
通过使用DLL,我们可以将通用的代码保存在一个地方,并在多个应用程序中复用。
在Delphi中调用DLL函数的方法如下:```function MyDLLFunction: ReturnType; stdcall; external'MyDLL.dll';```这里,MyDLL.dll是DLL文件的名称,MyDLLFunction是DLL函数的名称,ReturnType是函数的返回类型,stdcall是函数调用约定。
```function MyDLLFunction: ReturnType; stdcall;```在这里,ReturnType是函数的返回类型,stdcall是函数调用约定。
3. 调用DLL函数:一旦导入DLL函数并声明其函数原型,我们就可以在Delphi代码中直接调用该函数。
```varreturnValue: ReturnType;beginreturnValue := MyDLLFunction;// 使用returnValue执行其他操作end;```这里,returnValue是一个变量,用于存储DLL函数的返回值。
使用上述代码,我们可以调用DLL函数并将返回值存储在returnValue变量中,以便进一步处理。
在一些情况下,DLL函数可能需要参数。
在这种情况下,我们需要在声明和调用函数时指定这些参数。
```function MyDLLFunction(param1: Type1; param2: Type2): ReturnType; stdcall;...varreturnValue: ReturnType;beginreturnValue := MyDLLFunction(value1, value2);// 使用returnValue执行其他操作end;```这里,param1和param2是DLL函数所需的参数,Type1和Type2是参数的类型,value1和value2是实际的参数值。
DLL接口测试程序操作说明
![DLL接口测试程序操作说明](https://img.taocdn.com/s3/m/29ad770679563c1ec5da7126.png)
DLL接口(V6.51以上)测试程序操作说明一、输入接口授权码:1、运行门锁软件2、把帮助菜单下的“关于”栏打开,里面有门锁的系统ID号3、把此ID号发给我们,我们将根据此ID号生成一个动态库接口授权码4、运行门锁软件,点击“系统维护”下拉菜单的“一卡通设置”菜单栏5、在一卡通设置窗口中选择“授权”选项卡,在出现的授权窗口中第一栏内输入我们提供的接口授权码6、点击“确定”按钮即可二、接口测试程序操作1、把DLLSAMPLE.exe和所有动态库文件拷贝到一个文件夹下2、然后直接运行接口测试例子程序DLLSAMPLE.exe3、在接口测试程序窗口中:a)在“服务器”栏输入安装我门锁软件的那台电脑的名称b)在“门锁软件”栏选择lock3200kc)在“串口”栏选择实际连接发卡机的的com口号d)在“发卡机类型”栏选择手动发行机4、点击“初始化”按钮,返回值为0则表示初始化成功5、在“房号”栏输入与门锁软件中的对应的6位数房号。
比如0101016、在“有效时间”栏输入要求的时间段。
(参见lockdsk.doc相关说明)7、把“覆盖”前面的复选框打上勾8、在“客人姓名”和“客人ID”栏分别输入该卡的持有人姓名和证件号码9、点击“新客人”按钮,开始发行客人卡。
返回值为0表示发行成功10、点击“读卡”按钮,可以读出该卡的信息11、在“注销”按钮前面的“房号”、“卡号”栏输入需要注销卡的房间号和卡号,再点击“注销”按钮,就可以注销指定房间的该卡号的客人卡。
此时如果发卡机中插有卡,则会注销发卡机中的客人卡,如果发卡机中没有卡,则把门锁软件中的对应房间客人卡记录作注销处理,此为正常注销;如果在“卡号”栏输入0,则会直接注销指定房间内的所有卡信息(从数据库中删除)12、点击“遗失”按钮,可以把前面指定客房的客人卡或指定卡号的客人卡作遗失注销处理13、点击“退房”,可以把把前面指定客房的客人卡或指定卡号的客人卡作退房处理,只清库14、点击“结束”按钮,结束接口测试工作。
易语言API以及DLL调用方法详解。
![易语言API以及DLL调用方法详解。](https://img.taocdn.com/s3/m/96848aeb05a1b0717fd5360cba1aa81144318f2f.png)
对于新手易语言用户来说DLL和API很高深很神秘,你今天看了我这个教程,你就不觉得了!!进入正题:我们首先来编写一个易语言的子程序(这个不懂建议去再去看看例子)本子程序的原理就是:传递一个半径给本子程序然后使用公式算出周长后返回一个整数型的周长!!然后我们来调用这个函数:然后程序给编辑框1赋值圆周,然后显示到编辑框!运行程序就是这样了!!其实编写DLL和调用DLL的方式就于编写子程序相似!我们接下来用编写DLL的方式实现!打开易语言!打开易语言就是这样,跟以往不同的是没有窗口设计框!其实也可以添加窗口!!然后我们来编写DLL接口函数,按下ctrl+n然后创建一个子程序,在返回值类型写下整数型然后回车创建一个参数接口!就像这样参数名可以随便填写但是类型不能!因为半径是数字,所以我们设置为整数型。
然后我们创建一个变量周长来保存运行的结果!!因为我们上面返回值设置为整数型,所以我们需要返回一个整数。
返回的是上面?我们需要求周长,我们就返回周长!是不是跟先编写的子程序一样的?最重要的一点是这里必须勾上,因为勾上了这个,外部程序就能调用了!如果不勾上,这个子程序只能供DLL内部调用!然后我们编译起来!然后我们来调用这个DLL,运行易语言,新建一个程序!然后双击这里,我们需要声明程序函数(非常重要);为什么我们要声明呢?因为易语言中没有这个函数,所以我们要求程序调用外部的这个函数来帮助我们完成。
右键,新建一个DLL命令完成了,我们需要做什么呢?我们需要一个参数传递半径!这就是声明好了的DLL,那个文件名为什么只写一个1.dll呢?因为我这个是刚刚写的那个DLL的文件名,为什么不写完整路径呢?在同一目录下或者SYSTREAM32(系统)目录下的DLL都可以不用写上完整路径!那个参数1的类型就是刚刚那个DLL子程序1参数的类型。
必须注意的是,DLL 函数有返回值,所以声明的时候必须写上对应的数据类型!!然后我们就像调用子程序一样调用DLL,在写好代码以后需要保存,看源码路径和DLL路径是否在同一目录。
c#调用c++dll接口及回调函数
![c#调用c++dll接口及回调函数](https://img.taocdn.com/s3/m/6e5c2899d4d8d15abe234e7d.png)
c#调用c++dll接口及回调函数在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问题,尤其是传递和返回字符串是,现总结一下,分享给大家:VC++中主要字符串类型为:LPSTR,LPCSTR, LPCTSTR, string, CString, LPCWSTR, LPWSTR等但转为C#类型却不完全相同。
类型对照:BSTR --------- StringBuilderLPCTSTR --------- StringBuilderLPCWSTR --------- IntPtrhandle---------IntPtrhwnd-----------IntPtrchar *----------stringint * -----------ref intint &-----------ref intvoid *----------IntPtrunsigned char *-----ref byteStruct需要在C#里重新定义一个StructCallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错。
在C#调用C++ DLL封装库时会遇到以下问题:首先是数据类型转换问题。
因为C#是.NET语言,利用的是.NET的基本数据类型,所以实际上是将C++的数据类型与.NET的基本数据类型进行对应。
因为调用的是__stdcall函数,所以使用了P/Invoke的调用方法。
其中的方法FunctionName 必须声明为静态外部函数,即加上extern static声明头。
我们可以看到,在调用的过程中,unsigned char变为了byte,unsigned short变为了ushort。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
typedef void __stdcall (*fun_AddResult)(char pDataStr[10][255],double pDataDouble[100]); extern "C" void __declspec(dllimport) __stdcall SetBackColor(TColor pBkColor);extern "C" void __declspec(dllimport) __stdcall FanSelect(void *pSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSeriesNameCount,//系列名称个数,-1时表示全部选择void *pSubSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSubSeriesNameCount,//子系列名称个数,-1时表示全部选择const double &pFlow, //风量const int &pFlowUnitType, //风量单位类型0-m^3/h 1-m^3/s 2-l/s 3-cfmconst double &pPres, //风压const int &pPresUnitType, //风压单位类型0-Pa 1-mmH2O 2-kgf/cm^2 3-inH2Oconst int &pPresType, //风压类型0-全压1-静压const int &pOutFanType,//出风方式0-管道出风1-自由出风const double &pAirDensity,//空气密度const double &pMotorSafeCoff,//电机容量安全系数(%)const bool &pUserSetMotorSafeCoff,//用户设定了电机容量安全系数double &rFlow_STDUnit,//标准单位下的风量fun_AddResult pAddResult//函数指针,用于回传数据);extern "C" void __declspec(dllimport) __stdcall Belt_Selection(const char *pSeriesName,const char *pSubTypeName,const char *pModelName,const int &pSped_DataType,//电机转速类型0-标准数据1-用户数据默认为0(界面选择)const int &pHz_DataType,//频率选择0-50HZ 1-60HZ(界面选择)const int &pRotation,//出风旋转角度R0,R90,R180,R270(参考常量定义)const double &pFanSped,//风机转速(第一步计算得到)const double &pMotorPow,//电机功率(第一步计算得到)const double &pFlow_STDUnit,//标准单位下的风量const double &pTPres,//全压(第一步计算得到)const double &pSPres,//静压(第一步计算得到)const double &pFTEff,//全压内效率(第一步计算得到)const double &pSdbA,//噪声(第一步计算得到)const int &pV olt,//用户选择的电压(参考电压常量声明V380 V400) ,bool pPole[4],//用户选择的极数2,4,6,8bool pBeltType[4],//用户选择的皮带类型SPZ SPA SPB SPCconst bool &pBeSetFanSped,//用户设定了风机转速const double &pFanSpedRt_User,//用户设定的风机转速差const bool &pBeSetBeltMoveSped,//用户设定最大皮带运动速度const double &pBeltMoveSped_User,//用户设定的最大皮带运动速度const int &pUserSel_Distance,//用户的选择0-直接输入中心距(mm) 1-边距(mm)const double &pMargin,//边距(mm)const double &pCenterDistance,//中心距const double &pMotorSafeCof,//电机容量安全系数const bool &pUserSetMotorSafeCoff,//用户设定了电机容量安全系数const double &pFlow_STDSped,//标准转速下的风量(第一步选型结果,下标为46)const double &pMinL10,//轴承最小寿命fun_AddResult pAddResult//函数指针,用于回传数据);extern "C" double __declspec(dllimport) __stdcall CalAirDensity(const double &pB,//大气压力const double &pT,//空气温度const double &pV//相对湿度);extern "C" void __declspec(dllimport) __stdcall DrawCurvePic(const char *pSeriesName,const char *pSubTypeName,const char *pModelName,const char *pFileName,const double &pFlow,const double &pPres,const int &pWidth,const int &pHeight);//画皮带传动风机单转速曲线图extern "C" void __declspec(dllimport) __stdcall DrawSingleFanBySize(const char *pSeriesName,//系列名称const char *pSubTypeName,//子系列名称const char *pModelName,//型号名称const char *pFileName,//文件名称double pSped,//转速double pFlow,//风量(流量)double pDensity,//密度const int &pWidth,//图片宽度const int &pHeight,//图片高度const int &pFlowUnit,//风量单位const int &pPresUnit//风压单位);//画直联风机单转速曲线图extern "C" void __declspec(dllimport) __stdcall DrawDrectSingleFanBySize( const char *pSeriesName,//系列名称const char *pModelName,//型号名称const char *pMotorName,//电机名称const char *pFileName,//文件名称const double &pFlow,//风量(流量) 标准单位const int &pWidth,const int &pHeight,const int &pFlowUnit,//用户选择的风量单位0-标准单位const int &pPresUnit//用户选择的风压单位0-标准单位);extern "C" void __declspec(dllimport) __stdcall DirectFanSelect(void *pSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSeriesNameCount,//系列名称个数,-1时表示全部选择double &pFlow, //风量const int &pFlowUnitType, //风量单位类型0-m^3/h 1-m^3/s 2-l/s 3-cfmdouble &pPres, //风压const int &pPresUnitType, //风压单位类型0-Pa 1-mmH2O 2-kgf/cm^2 3-inH2O const int &pPresType,//风压类型0-全压1-静压const int &pHz_DataType,//频率选择0-50HZ 1-60HZconst int &pvoltage,//电压0-380 1-220const double &pResultDisData, //选型差值(小数0.1代表10%)const double &pAirDensity,//空气密度fun_AddResult pAddResult//函数指针,用于回传数据);。