13794993971
论坛版主
论坛版主
  • 发帖数51
  • QQ123523507
  • 金币615两
  • 威望194点
  • 钻石0枚
  • 注册日期2016-11-12
  • 最后登录2020-04-01
  • 社区居民
阅读:15418回复:4

[资源分享]tiptop如何通过DLL动态链接库去扩充功能

楼主#
更多 发布于:2016-11-12 07:37
今天的教程是指导如果使用tiptop来对接windows平台下的dll(动态连接库)去扩充tiptop的功能,Genero 4js公司明确表示4GL语言是支持CJAVA语言对接的,但是通过单一的语言对接,基本功能有限,所以Genero 4GL提供了和windows dll的对接,这样tiptop可以在客户机通过GDC去调用DLL去完成更多的事情(例如打开QQ,屏幕截图实时聊天等功能)。
下面我们来做一个简单的功能,用户只需要在tiptop界面点击按钮,通过DLL去获得客户机的IP信息(虽然tiptop是能够实现这个功能,但是本次是使用dll去完成),再实时传送给tiptop,再由tiptop去写入数据库保存,这样就可以知道用户的IP地址了。

【测试环境要求】:GDC2.X版本
DLL版本,WIN32 dll MFC标准的DLL目前测试不过
DLL编写平台:VISUAL C++ 6.0

【效果如下图】
效果一:只弹出一个窗口代表DLL已经开始工作

图片:图片1.png



效果二:DLL读取计算机名,并传回给TIPTOP显示,本次不显示这个对话框

图片:图片2.png


效果三:DLL读取计算机IP,弹出对话框,并回传给TIPTOP

图片:图片3.png





【首先来编写一个DLL文件】
打开VC 6.0
新建一个DLL工程

图片:图片4.png



找到头文件,看看以下代码 申明需要遵循4GL的标准,用于传入和传出的参数必须是一个结构体,我们来申明这个结构体,不要申明其他类型的数据。如下图

图片:图片5.png



以下是C++代码:

图片:QQ拼音截图未命名.png



看看具体的函数怎么写,具体的功能大家可以去写的更高大上点,本次就简单的写两个功能来演示:
【上代码】
int makeSum(const struct frontEndInterface &fx) { //获得两个数相加等于几
 //这个参数用于返回给tiotop返回执行的结果
 short status = -1;
// 判断传入的参数对不对,tiptop里传入的参数必须和这个一致,也就是tiptop中没办法去判断
 //必须使用几个参数,这里就需要判断参数的个数是否是需要的2
   if (fx.getParamCount() == 2 && fx.getReturnCount() == 2) {
     long param1, param2;
     short isNull1, isNull2;
 //复制到DLL的堆栈
   fx.popInteger(param2, isNull2);
   fx.popInteger(param1, isNull1);
 
   if (!isNull1 && !isNull2) {
   
// 计算两个结果的答案,也就是参数A+参数B
   long sum = param1 + param2;
   char msg[255];
   sprintf(msg, "%d + %d = %d", param1, param2, sum);

// 把答案COPYGDC的堆栈
   fx.pushInteger(sum, 0);
   fx.pushString(msg, strlen(msg), 0);
// 成功就返回0
   status = 0;
   }
 }
 return status;  //所有函数都要返回一个0或者1TIPTOP接收
}
int Gethostname(const struct frontEndInterface &fx)
{
   short status = -1;
WSADATA wsadata;  
   WORD dwVersionRequested;  
   int err=WSAStartup(dwVersionRequested,&wsadata);  
   char hostname[255];    
   if(gethostname(hostname,128)==0)  
   {  
      // 要干点啥?
   }    
   if (fx.getParamCount() == 0 && fx.getReturnCount() == 1)
{
 fx.pushString(hostname, strlen(hostname), 0);//将计算机名放到结构体中供GDC
     status = 0;
}
     return status;
}
编译成DLL 文件,找到DEBUG 文件下的这个DLL文件,放到GDC.exe文件下即可
tiptop中如何操作】

图片:图片6.png



看看我们的结果:
CALL ui.Interface.frontCall( "Mdll", "makeSum", [a,b], [c,res])结果:

图片:图片7.png


CALL ui.Interface.frontCall( "Mdll", "Gethostname", [], [res])结果:

图片:图片8.png




需要注意的问题:加载完DLL后,使用完记得卸载。

大家可以到 www.tiptop100.com,大家一起共同学习共同交流
喜欢5 评分0
官方QQ群:481859105  

Perry
管理员
管理员
  • 发帖数213
  • QQ396572376
  • 金币41430两
  • 威望11345点
  • 钻石8888枚
  • 注册日期2016-11-09
  • 最后登录2024-04-25
  • VIP会员
  • 荣誉会员
  • 优秀斑竹
  • 最爱沙发
  • 原创写手
  • 社区居民
沙发#
发布于:2016-11-12 08:37
不错,大神果真在民间,32位跟64位dll,需要兼容!
官方QQ群:556775727  
回复(0) 喜欢(0)     评分
kuangkuang
论坛版主
论坛版主
  • 发帖数52
  • QQ309200966
  • 金币681两
  • 威望132点
  • 钻石0枚
  • 注册日期2016-11-11
  • 最后登录2023-05-19
板凳#
发布于:2016-11-14 11:13
QQ空间里面转载一份类似的文章, 估计也是这位大神写的 .
回复(0) 喜欢(0)     评分
76856123@163.com
中级会员
中级会员
  • 发帖数23
  • QQ76856123
  • 金币85两
  • 威望57点
  • 钻石0枚
  • 注册日期2017-03-15
  • 最后登录2018-07-10
  • 社区居民
地板#
发布于:2017-04-19 17:35
真正的大神
回复(0) 喜欢(0)     评分
jacojay
高级会员
高级会员
  • 发帖数36
  • QQ7000907
  • 金币123两
  • 威望178点
  • 钻石0枚
  • 注册日期2017-09-13
  • 最后登录2023-04-12
  • 社区居民
4楼#
发布于:2017-09-15 14:02
想问一下怎么卸载?
回复(0) 喜欢(0)     评分
游客

返回顶部