`
womendu
  • 浏览: 1486992 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

pb调用.net组件的实践(二)

阅读更多

  前几天刚刚发了一篇 pb调用.net组件的实践 

  但是遇到了汉字乱吗的问题。经过测试,在pb9中调用不会出现乱码。但是由于原来的项目是用pb7写的。全部转移到pb9上的工作量是很大的。所以不能离开pb7的环境。最后采用了汉字转换成byte数据的方式解决了这个问题。

  类代码

ImportsSystem.Math
<ComClass(CodeQuery.ClassId,CodeQuery.InterfaceId,CodeQuery.EventsId)>_
PublicClassCodeQueryClassCodeQuery

COMGUID#Region"COMGUID"
'这些GUID提供此类的COM标识
'及其COM接口。若更改它们,则现有的
'客户端将不再能访问此类。
PublicConstClassIdAsString="225d6048-672b-42c0-a623-6688596592b0"
PublicConstInterfaceIdAsString="4812e4bd-0aa8-4716-a306-6d774d7cdc72"
PublicConstEventsIdAsString="a47bfff0-24ae-45ee-809a-2664efcd1777"
#EndRegion


'可创建的COM类必须具有一个不带参数的PublicSubNew()
'否则,将不会在
'COM注册表中注册此类,且无法通过
'CreateObject创建此类。
PublicSubNew()SubNew()
MyBase.New()
EndSub


PublicFunctiongetCodeList()FunctiongetCodeList()AsSortedList
DimslAsSortedList
DimcrcAsNewCrcDbConnection.CrcDbConnection
crc.ConnDatabase()
sl
=crc.GetCodeSortList
Returnsl
EndFunction

'''<summary>
'''返回字符串
'''</summary>
'''<returns>返回拼接成字符串的编码信息</returns>
'''<remarks>key;value|key;value|……</remarks>
PublicFunctiongetCodeString()FunctiongetCodeString()AsString
DimslAsSortedList
sl
=getCodeList()
DimstrCodeAsNewSystem.Text.StringBuilder
IfNotslIsNothingThen
DimsItemAsSystem.Collections.DictionaryEntry
ForEachsItemInsl
strCode.Append(sItem.Key)
strCode.Append(
";")
strCode.Append(sItem.Value)
strCode.Append(
"|")
Next
EndIf
ReturnIIf(strCode.Length>0,strCode.Remove(strCode.Length-1,1).ToString,"")
EndFunction

'''<summary>
'''返回数组
'''</summary>
'''<returns>返回生成的数组</returns>
'''<remarks>二维数组储存key/value对</remarks>
PublicFunctiongetCodeArray()FunctiongetCodeArray()AsString(,)
DimarrCode(,)AsString
DimiAsLong=0
DimslAsSortedList
sl
=getCodeList()
ReDimarrCode(sl.Count,2)
IfNotslIsNothingThen
DimsItemAsSystem.Collections.DictionaryEntry
ForEachsItemInsl
arrCode(i,
0)=sItem.Key
arrCode(i,
1)=sItem.Value
i
+=1
Next
EndIf
ReturnarrCode
EndFunction

'''<summary>
'''返回编码
'''</summary>
'''<returns>返回选择编码</returns>
'''<remarks></remarks>
PublicFunctiongetCode()FunctiongetCode()AsString
DimarrCodeAsString=""
DimiAsLong=0
DimslAsSortedList
sl
=getCodeList()
IfNotslIsNothingThen
arrCode
=sl.GetByIndex(sl.IndexOfKey("代码"))
EndIf
ReturnarrCode
EndFunction

'''<summary>
'''返回asc
'''</summary>
'''<returns>返回asc编码串</returns>
'''<remarks></remarks>
PublicFunctiongetCodeStringASC()FunctiongetCodeStringASC()AsString
DimslAsSortedList
sl
=getCodeList()
DimbyAsByte()
DimiAsLong
DimstrCodeAsNewSystem.Text.StringBuilder
IfNotslIsNothingThen
DimsItemAsSystem.Collections.DictionaryEntry
ForEachsItemInsl
by
=System.Text.Encoding.Default.GetBytes(sItem.Key)
Fori=0Toby.GetUpperBound(0)
strCode.Append(by(i).ToString())
strCode.Append(
":")
Next
strCode.Remove(strCode.Length
-1,1)
strCode.Append(
";")
by
=System.Text.Encoding.Default.GetBytes(sItem.Value)
Fori=0Toby.GetUpperBound(0)
strCode.Append(by(i).ToString())
strCode.Append(
":")
Next
strCode.Remove(strCode.Length
-1,1)
strCode.Append(
"|")
Next
strCode.Remove(strCode.Length
-1,1)
EndIf
ReturnstrCode.ToString
EndFunction

'''<summary>
'''返回asc数组
'''</summary>
'''<returns>返回生成的asc数组</returns>
'''<remarks>二维数组储存key/value对</remarks>
PublicFunctiongetCodeArrayAsc()FunctiongetCodeArrayAsc()AsString(,)
DimarrCode(,)AsString
DimiAsLong=0
DimslAsSortedList
sl
=getCodeList()
DimbyAsByte()
DimjAsLong
DimstrCodeAsNewSystem.Text.StringBuilder
ReDimarrCode(sl.Count,2)
IfNotslIsNothingThen
DimsItemAsSystem.Collections.DictionaryEntry
ForEachsItemInsl
by
=System.Text.Encoding.Default.GetBytes(sItem.Key)
Forj=0Toby.GetUpperBound(0)
strCode.Append(by(j).ToString())
strCode.Append(
":")
Next
IfstrCode.Length>0ThenstrCode.Remove(strCode.Length-1,1)
arrCode(i,
0)=strCode.ToString
strCode.Remove(
0,strCode.Length)

by
=System.Text.Encoding.Default.GetBytes(sItem.Value)
Forj=0Toby.GetUpperBound(0)
strCode.Append(by(j).ToString())
strCode.Append(
":")
Next
IfstrCode.Length>0ThenstrCode.Remove(strCode.Length-1,1)
arrCode(i,
1)=strCode.ToString
strCode.Remove(
0,strCode.Length)
i
+=1
Next
EndIf
ReturnarrCode
EndFunction

EndClass



请注意其中的 

Public Function getCodeStringASC() As String  返回字符串

 和 

Public Function getCodeArrayAsc() As String(,)   返回数组

在 pb7 中的代码:

split 函数 public function long split (string str1, string sep, ref string arrR[])

longlPos=1
longlFind
stringarrNull[]
ifisnull(str1)orisnull(sep)then
setnull(lPos)
returnlPos
endif
arrR[]
=arrNull[]
lPos
=1
lFind
=pos(upper(str1),upper(sep))
dowhilelFind>0
arrR[lPos]
=left(str1,lFind-1)
str1
=right(str1,len(str1)-lFind-len(sep)+1)
lFind
=pos(upper(str1),upper(sep))
lPos
=lPos+1
loop
arrR[lPos]
=str1
returnlPos

getcode1 函数 public function getcode1(ref string arrKey[], ref string arrValue[]) returns (none)

字符串方式

intintValue
oleobjectobjOle
objOle
=createOLEObject
intValue
=objOle.connecttonewobject("codeforcom.CodeQuery")
ifintValue=0then
stringv
inti,j,k
v
=objOle.getcodestringAsc()

stringoItem[]
stringoKey[]
stringoAsc[]
stringkey
split(v,"|",refoItem)
fori=1toupperbound(oItem)
split(oItem[i],";",refoKey)
forj=1toupperbound(oKey)
split(oKey[j],":",refoAsc)
key
=""
fork=1toupperbound(oAsc)
key
=key+char(long(oAsc[k]))
next
ifj=1then
arrKey[i]
=key
else
arrValue[i]
=key
endif
next
分享到:
评论

相关推荐

    PB 调用.NET COM组件

    PB 调用.NET COM组件 http://blog.csdn.net/lijianhe043/article/details/6797508

    PB90调用.net的COM组件

    PB90调用.net的COM组件,直接将PB源代码文件导入PBL运行即可

    pb调用C#中COM组件实例(源码+运行EXE)

    pb调用C#中COM组件实例(源码+运行EXE) 说明 http://blog.csdn.net/tangkechu/article/details/37593911

    C# 调用PB的DLL文件

    C#中使Datawindow.Net组件处理数据Datawindow.Net为PB专为MS.Net开发的数据访问组件。

    C#调用java组件SatJni1.2

    C#直接调用java类(jar或.class文件),无需转化为.net组件,更快速、稳定 SatJni是C++编写的动态链接库,实现了C#,PB,Delphi,VB,VC等对Java的调用,能让你很容易地调用成熟的java类库和第三方java组件。不用再为移值...

    PowerBuilder 11的.NET互操作能力-创建和使用.NET资源.rar

    PowerBuilder 11将整个应用作为.NET Windows Form或Web Form应用来部署,将单独的组件作为.NET 程序集和.NET Web服务来部署。PowerBuilder 11使用默认的.NET 框架资源和开发人员自定义的.NET资源。非PowerBuilder ...

    jmail组件,用于通过pb\vb\delphi\.net\java等工具调用,发送邮件

    jmail组件,用于通过pb\vb\delphi\.net\java等工具调用,发送邮件

    在c# 2005中编写com组件,供PB11调用实例(附说明和源码)

    前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。 1、c#2005中新建项目,类型为类库,项目名为AddCom确定。  配置:右键点击解决方案资源管理器中的AddCom,选择...

    wininet pb进行FTP

    wininet组件,用于通过pb\vb\delphi\.net\java等工具调用,发送邮件

    国密SM4加解密SM2签名验签COM组件DLL.rar

    提供给第三方软件,调用COM组件DLL方式进行实现,如delphi、PB等。调用方法与黑龙江省医保社保卡调用方式一致。各软件调用方法也可自行网上查询,如“delphi调用C#的COM组件DLL”。 基于C#编写的COM组件DLL,可实现...

    PB进阶代码(很全的)

    包含开发Jaguar组件和调用Jaguar组件的两个例子的源程序 第12章 PBNI PBNI应用技术 -- PBNI 本光盘所收集内容的著作权为作者所有;作者授权清华大学出版社独家出版该光盘;清华大学出版社享有该光盘的专有出版权...

    PB MD5利用系统winapi实现(绝对好用)

    详细说明:http://blog.csdn.net/xiajinxian/article/details/46627527 适用环境:powerbuilder 10.0以后的版本 window server2003...PB也可以调用系统自带的DLL 实现MD5 其中md5file对大附件的处理速度也比第三方组件快

    ACReport中国式报表控件2011(Ver2.45)

    8. 和应用程序完美结合,支持windows下所有的开发工具和程序语言(例如Delphi、C++、VB、PB、.NET、易语言),最终用户在设计器里可直接选择打印字段,生成表达式,报表设计器用户容易学习理解。 9. 支持脚本和窗体...

    ACReport中国式报表控件2011(Ver2.3)

    8. 和应用程序完美结合,支持windows下所有的开发工具和程序语言(例如Delphi、C++、VB、PB、.NET、易语言),最终用户在设计器里可直接选择打印字段,生成表达式,报表设计器用户容易学习理解。 9. 支持脚本和窗体...

    Anycell Report 中国式报表控件2011 2.45.008.rar

    和应用程序完美结合,支持windows下所有的开发工具和程序语言(例如Delphi、C++、VB、PB、.NET、易语言),最终用户在设计器里可直接选择打印字段,生成表达式,报表设计器用户容易学习理解。  9. 支持脚本和窗体...

    ACReport中国式报表控件2011(Ver 2.50)

    8. 和应用程序完美结合,支持windows下所有的开发工具和程序语言(例如Delphi、C++、VB、PB、.NET、易语言),最终用户在设计器里可直接选择打印字段,生成表达式,报表设计器用户容易学习理解。 9. 支持脚本和窗体...

    实现类似Office助手的小精灵

    Office助手只允许Office 97的各个组件调用,Agent动画人物可由任何Windows程序调用; Agent支持文字气球和输入提示条,在输出语音的同时把文字输出至一个卡通式文字气球中。 如果电脑系统中安装有Agent语音识别...

    滴答表格企业版 5.1.2

    滴答表格控件基于WINDOWS的ActiveX技术,可以运行在WINDOWS下的任何开发工具,比如.NET,VB,DELPHI,PB,易语言等,同时也可 以运行在WEB上,用户通过VBS或JS进行操作产品;另一方面,用户不需要担心因更换开发...

    JAVA上百实例源码以及开源项目源代码

     各种EJB之间的调用源码示例,用远程接口的引用访问EJB、函数将被FirstEJB调用,同时它将调用secondEJB 基于JAVA的UDP服务器模型源代码 2个目标文件 摘要:Java源码,网络相关,UDP  基于JAVA的UDP服务器模型源代码...

    JAVA上百实例源码以及开源项目

     各种EJB之间的调用源码示例,用远程接口的引用访问EJB、函数将被FirstEJB调用,同时它将调用secondEJB 基于JAVA的UDP服务器模型源代码 2个目标文件 摘要:Java源码,网络相关,UDP  基于JAVA的UDP服务器模型源代码...

Global site tag (gtag.js) - Google Analytics