以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]第一次使用DLL,如何编写API,求老师引路。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=119666)

--  作者:wangjh8888
--  发布时间:2018/5/29 20:53:00
--  [求助]第一次使用DLL,如何编写API,求老师引路。
老师 您好,
在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();

--  作者:有点蓝
--  发布时间:2018/5/29 21:08:00
--  
参考这种用法

把dll复制到狐表安装目录


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

--  作者:wangjh8888
--  发布时间:2018/5/29 21:31:00
--  
嗯嗯

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

--  作者:有点蓝
--  发布时间: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
--  发布时间:2018/5/29 21:58:00
--  
老师: 

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

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

--  作者:有点蓝
--  发布时间:2018/5/29 22:10:00
--  
不需要外部引用
--  作者:wangjh8888
--  发布时间: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)

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


--  作者:有点甜
--  发布时间:2018/5/30 9:44:00
--  
叫对方给你一个C#或者vb.net的实例。不然自己参考帮助文档编写引用。
--  作者:wangjh8888
--  发布时间:2018/5/30 11:00:00
--  
c++ 的可以吗
--  作者:有点甜
--  发布时间:2018/5/30 11:08:00
--  
以下是引用wangjh8888在2018/5/30 11:00:00的发言:
c++ 的可以吗

 

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