Foxtable(狐表)用户栏目专家坐堂 → [求助]第一次使用DLL,如何编写API,求老师引路。


  共有3207人关注过本帖树形打印复制链接

主题:[求助]第一次使用DLL,如何编写API,求老师引路。

帅哥哟,离线,有人找我吗?
wangjh8888
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:502 积分:4924 威望:0 精华:0 注册:2016/7/11 10:12:00
[求助]第一次使用DLL,如何编写API,求老师引路。  发帖心情 Post By:2018/5/29 20:53:00 [只看该作者]

老师 您好,
在foxtable第一次碰到使用DLL,已经把 M5DBPCtrl.dll 复制到FT,并添加了外部引用,如何在全局代码中来定义API,请老师指教,谢谢

附:M5DBPCtrlDef.h DBPlayer控制接口函数头文件, 声明接口函数原型和返回值定义, 供参考
#pragma once

#ifndef M5DBP_EXP
#define M5DBP_EXP __declspec(dllimport)
#endif

// DBPlayer 控制API返回值
enum{
m5dbp_succeeded = 0, // 执行成功
m5dbp_err_failed = -1, // 未知原因失败
m5dbp_err_exception_on_send = -2, // 发送时出现异常
m5dbp_err_not_found_dbplayer = -3, // 没有找到DBPlayer
m5dbp_err_has_been_initialized = -4,// 已经初始化过
m5dbp_err_create_msg_window = -5, // 创建消息窗口失败
m5dbp_err_not_initialized = -6 // 没有初始化
};

// 初始化动态库
extern "C" M5DBP_EXP 
HRESULT M5DBP_Init(HWND hParent);

// 启动任务
extern "C" M5DBP_EXP 
HRESULT M5DBP_StartDBTask(wchar_t * lpszDBTaskName);

// 结束任务
extern "C" M5DBP_EXP
HRESULT M5DBP_StopDBTask(wchar_t * lpszDBTaskName);

// 清理
extern "C" M5DBP_EXP 
HRESULT M5DBP_Clear();

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110795 积分:563913 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/29 21:08:00 [只看该作者]

参考这种用法

把dll复制到狐表安装目录


Public Declare Function M5DBP_Init Lib "M5DBPCtrl.dll" Alias "M5DBP_Init" (hParent As IntPtr ) As Integer

 回到顶部
帅哥哟,离线,有人找我吗?
wangjh8888
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:502 积分:4924 威望:0 精华:0 注册:2016/7/11 10:12:00
  发帖心情 Post By:2018/5/29 21:31:00 [只看该作者]

嗯嗯

再问  1.  IntPtr  是什么类型(不好意思,刚学)
2.  其他还有三个,应该怎么定义,能不能也帮忙写出来?
谢谢啊

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110795 积分:563913 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/29 21:39:00 [只看该作者]

1、自己百度

2、Public Declare Function M5DBP_StartDBTask Lib "M5DBPCtrl.dll" Alias "M5DBP_StartDBTask" (lpszDBTaskName As string) As Integer

Public Declare Function M5DBP_StopDBTask Lib "M5DBPCtrl.dll" Alias "M5DBP_StopDBTask" (lpszDBTaskName As string) As Integer

Public Declare Function M5DBP_Clear Lib "M5DBPCtrl.dll" Alias "M5DBP_Clear" () As Integer

 回到顶部
帅哥哟,离线,有人找我吗?
wangjh8888
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:502 积分:4924 威望:0 精华:0 注册:2016/7/11 10:12:00
  发帖心情 Post By:2018/5/29 21:58:00 [只看该作者]

老师: 

M5DBPCtrl.dll 添加到外部引用后,再进入全局代码编辑确定时就出现未知编辑错误,(全局代码编辑还没有添加定义API代码)

外部引用删除M5DBPCtrl.dll后,就不出现错误,什么问题?

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110795 积分:563913 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/29 22:10:00 [只看该作者]

不需要外部引用

 回到顶部
帅哥哟,离线,有人找我吗?
wangjh8888
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:502 积分:4924 威望:0 精华:0 注册:2016/7/11 10:12:00
  发帖心情 Post By:2018/5/30 9:22:00 [只看该作者]

老师,早

我的测试是这样的:
1.M5DBPCtrl.dll  复制到 C:\foxtable\eval

2.全局代码:
Public Declare Function M5DBP_Init Lib "M5DBPCtrl.dll" Alias "M5DBP_Init" (hParent As IntPtr ) As Integer
Public Declare Function M5DBP_StartDBTask Lib "M5DBPCtrl.dll" Alias "M5DBP_StartDBTask" (lpszDBTaskName As String) As Integer
Public Declare Function M5DBP_StopDBTask Lib "M5DBPCtrl.dll" Alias "M5DBP_StopDBTask" (lpszDBTaskName As String) As Integer
Public Declare Function M5DBP_Clear Lib "M5DBPCtrl.dll" Alias "M5DBP_Clear" () As Integer

3.测试窗口:Button1,Click 代码:   Dim nn As Integer = M5DBP_StartDBTask("ABC")

出现错误报告:

.NET Framework 版本:2.0.50727.5420
Foxtable 版本:2018.3.9.1
错误所在事件:窗口,窗口1,Button1,Click
详细错误信息:
试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

请老师帮忙看看 哪里问题, ?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/30 9:44:00 [只看该作者]

叫对方给你一个C#或者vb.net的实例。不然自己参考帮助文档编写引用。

 回到顶部
帅哥哟,离线,有人找我吗?
wangjh8888
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:502 积分:4924 威望:0 精华:0 注册:2016/7/11 10:12:00
  发帖心情 Post By:2018/5/30 11:00:00 [只看该作者]

c++ 的可以吗

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/30 11:08:00 [只看该作者]

以下是引用wangjh8888在2018/5/30 11:00:00的发言:
c++ 的可以吗

 

不可以。如果用c++,你还得再封装一次,才能给c#、vb.net使用。


 回到顶部
总数 15 1 2 下一页