VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: VBProFan

[原创] C Func To VB 转换器(大家不要抱太大希望)

[复制链接]
 楼主| 发表于 2009-12-4 18:46:14 | 显示全部楼层

改进二

本帖最后由 VBProFan 于 2009-12-5 23:44 编辑
  1.   '翻译函数定义,假设第二行是函数定义
  2.   p = InStr(1, sFuncDefLine, "(")
  3.   sWord = Split(Left$(sFuncDefLine, p))
  4.   
  5.   For p = 0 To UBound(sWord) - 1
  6.     If sWord(p) <> sKeyWords(0) And sWord(p) <> sKeyWords(1) Then
  7.       sFuncType = sWord(p)
  8.       sFuncType = Replace(sFuncType, "int", "Long")
  9.       sFuncType = Replace(sFuncType, "bool", "Boolean")
  10.       Exit For
  11.     End If
  12.   Next p
  13.   
  14.   i = InStr(sFuncDefLine, "(")
  15.   j = InStr(sFuncDefLine, ")")
  16.   sFuncDefLine = Mid$(sFuncDefLine, i + 1, j - i - 1)
  17.   sVar = Split(sFuncDefLine, ",")
  18.   
  19.   sFuncDefLine = "Private " & IIf(sFuncType = "void", "Sub ", "Function ") _
  20.               & sFuncName & "("
  21.               
  22.   For p = 0 To UBound(sVar)
  23.     sVar(p) = Trim$(sVar(p))
  24.     sVar(p) = Split(sVar(p))(1) & " As " & Split(sVar(p))(0)
  25.     sVar(p) = Replace(sVar(p), "int", "Long")
  26.     sFuncDefLine = sFuncDefLine & sVar(p)
  27.     If p < UBound(sVar) Then
  28.       sFuncDefLine = sFuncDefLine & ", "
  29.     End If
  30.   Next p
  31.   
  32.   sFuncDefLine = sFuncDefLine & ")" & IIf(sFuncType = "void", "", " As " & sFuncType)
  33.   i = InStr(1, s, vbCrLf)
  34.   j = InStr(i + 1, s, vbCrLf)
  35.   s = Left$(s, i + 1) & sFuncDefLine & vbCrLf & Right$(s, Len(s) - j)
  36.   
  37.   s = Replace(s, "}", "End " & IIf(sFuncType = "void", "Sub", "Function"))
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-12-5 17:14:08 | 显示全部楼层
本帖最后由 hovidelphic 于 2009-12-5 17:19 编辑

以后驱动程序用VB写,我搞个转换器把VB的驱动程序代码转成C的代码。间接实现VB-DDK的伟大设想。
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2009-12-5 19:20:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2009-12-5 21:19:04 | 显示全部楼层
To hovidelphic
不过这样显然还不如直接用C写噢~毕竟翻译后还需要检查CODE,而且里面需要等等的修饰符..VB貌似如果把错误检测去除的话...那些代码都会是大红脸~

还有代码上色等,指针表达..等等
回复 支持 反对

使用道具 举报

发表于 2009-12-6 00:05:18 | 显示全部楼层
膜拜下,继续学习!
关于转换器的问题,应该还是比较又可能完成的
毕竟细分下来,所有代码都是那么几个控制语句构成的么~
回复 支持 反对

使用道具 举报

发表于 2009-12-7 07:06:03 | 显示全部楼层
哈有转换器。太牛了。。
回复 支持 反对

使用道具 举报

发表于 2009-12-8 01:40:39 | 显示全部楼层
支持楼主,很有用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-8 08:34:29 | 显示全部楼层

改进三

  1.   '处理多参数函数调用(特征:左括号前面没有“If”、“'”、“=”、“Function”、“Sub”,括号中有逗号)
  2.   lb = 0
  3.   Do
  4.     lb = InStr(lb + 1, s, "(") '找左括号
  5.     If lb <> 0 Then
  6.       Brace = 1
  7.       
  8.       For rb = lb + 1 To Len(s)
  9.         If Mid$(s, rb, 1) = "(" Then
  10.           Brace = Brace + 1
  11.         ElseIf Mid$(s, rb, 1) = ")" Then
  12.           Brace = Brace - 1
  13.         End If
  14.         If Brace = 0 Then '找到对应的右括号
  15.           j = InStrRev(s, vbCrLf, rb) '找到左侧的回车符
  16.           sCheck = Mid$(s, j + 2, lb - j - 2)
  17.           If j > 0 And InStr(sCheck, "'") = 0 _
  18.                    And InStr(sCheck, "If") = 0 _
  19.                    And InStr(sCheck, "Function") = 0 _
  20.                    And InStr(sCheck, "Sub") = 0 _
  21.                    And InStr(sCheck, "=") = 0 Then
  22.             sFunCall = Mid$(s, lb + 1, rb - lb - 1)
  23.             If InStr(sFunCall, ",") > 0 Then
  24.               Mid(s, lb, 1) = " "
  25.               Mid(s, rb, 1) = " "
  26.             End If
  27.           End If
  28.           Exit For
  29.         End If
  30.       Next rb
  31.       
  32.     End If
  33.   Loop Until lb = 0
  34.   
  35.   '替换特殊宏
  36.   s = Replace(s, "sizeof(int)", "4")
  37.   s = Replace(s, "sizeof(char)", "1")
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-8 08:51:17 | 显示全部楼层
本帖最后由 VBProFan 于 2009-12-8 08:55 编辑

还有其他细节的修改就不说了,直接看程序:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1威望 +13 人气 +2 收起 理由
hovidelphic + 13 + 2 路过先膜拜,回头再下载。

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-21 21:48:14 | 显示全部楼层

改进四

本帖最后由 VBProFan 于 2009-12-21 21:51 编辑

本来写了个 What's new 文档的,不小心删掉了,打击甚大,懒得再写了,看截图!

为降低被别人弄个病毒控件进去或者加一句 Shell 病毒再重新发布该源码的风险,想了很久还是加个权限吧~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1威望 +13 人气 +2 收起 理由
hovidelphic + 13 + 2 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-3 17:14

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表