`
womendu
  • 浏览: 1513587 次
  • 性别: 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组件" 涉及的关键知识点主要集中在PowerBuilder(PB)如何与.NET Framework中的COM组件交互。在.NET Framework中,可以通过创建COM互操作组件(也称为托管COM),使得非.NET环境如PB这样的应用...

    PB90调用.net的COM组件

    7. **环境依赖**:注意,由于PowerBuilder是基于.NET Framework 2.0的,所以压缩包中的`NetFx20SP2_x86.exe`可能是.NET Framework 2.0 SP2的安装包,确保PB运行时环境具备调用.NET组件的条件。 通过以上步骤,我们...

    PB调用C#写的dll文件

    标题中的“PB调用C#写的dll文件”指的是在PowerBuilder(PB)应用程序中使用C#编译的动态链接库(DLL)文件。这通常涉及到跨语言互操作性,允许不同编程语言之间的通信和功能共享。 C#是一种现代、面向对象的编程...

    pb12.net wpf 例题1

    【标题】"pb12.net wpf 例题1"涉及的是使用PowerBuilder 12(简称pb12)与Windows Presentation Foundation(WPF)进行应用程序开发的相关实践案例。WPF是.NET Framework的一个重要组成部分,它提供了一种强大的UI...

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

    标题中的“pb调用C#中COM组件实例”是指在PowerBuilder(PB)环境中通过COM(Component Object Model)接口调用由C#语言编写的组件。这种方法允许不同编程语言之间进行互操作,使得PB能够利用C#的强大功能,如.NET ...

    C# 调用PB的DLL文件

    C# 调用 PB 的 DLL 文件是指在 C# 程序中使用_pb_(PowerBuilder)开发的 DataWindow.Net 组件来处理数据。DataWindow.Net 是 PB 专门为 MS.Net 开发的数据访问组件,允许开发者在 C# 程序中使用 PB 的功能。 主要...

    pb11.5调摄像头_pb调用摄像头_pb11.5调用摄像头_

    2. 使用.NET组件:如果你的系统中安装了.NET Framework,可以通过创建.NET代理类来调用.NET中的摄像头库。PowerBuilder 11.5支持.NET互操作性,允许你直接引用.NET DLL。找到一个合适的.NET摄像头库(例如AForge.NET...

    Pb调用 c#编写的DLL

    这将允许非.NET框架的应用程序(如PB)访问此DLL。 接下来,转到“生成”标签,勾选“为COM互操作注册”。然后,进入“签名”标签,选择“为程序集签名”,点击“选择强名称密钥文件”,然后选择“新建”来创建一个...

    PB调用c#com组件发送邮件.zip

    标题中的“PB调用c#com组件发送邮件.zip”表明这是一个关于使用PowerBuilder(PB)通过COM组件调用C#编写的邮件发送功能的示例。这个压缩包包含了一整套实现这一功能所需的资源,包括注册和反注册的批处理文件、C#...

    pb12.net wpf 相关例题2

    描述中提到的“pb12.net wpf/wcf相关应用例题下载”,暗示这些例子可能不仅涉及WPF,还涉及到Windows Communication Foundation(WCF),这是一个.NET框架服务导向架构组件,用于创建分布式系统中的服务。...

    关于pb调用C#的com出错问题的dll,请大家帮助一下

    标题中的“pb调用C#的com出错问题”涉及到的是两种不同编程语言之间的互操作性,即PowerBuilder(PB)通过COM(Component Object Model)接口调用C#编写的动态链接库(DLL)。COM是一种组件技术,允许不同语言之间...

    在pb中调用word来编辑保存在数据库中的word文件.rar_PB 调用 word_jetr5n_pb word_pb数据库_

    总的来说,通过PB调用Word编辑数据库中的Word文件,结合了PB的数据处理能力和Word的文档编辑能力,为用户提供了一种无缝集成的解决方案。这一过程需要对PB、数据库操作、Word对象模型以及OLE自动化有深入的理解和...

    PB调用WebService

    .NET Bridge是PowerBuilder的一个组件,它允许PB应用程序直接调用.NET Framework中的类库,包括Web服务。开发者可以使用PB的.NET DataWindow对象,通过拖放操作将Web服务的方法添加到数据窗口中,然后在代码中执行...

    PB调用IC卡读卡器程序例子代码

    标题中的“PB调用IC卡读卡器程序例子代码”是指使用PowerBuilder(PB)这一编程工具来与IC卡读卡器进行交互的示例代码。在IT领域,这种交互通常涉及到通过API(应用程序编程接口)调用来实现硬件设备如IC卡读卡器的...

    c#开发webservice供pb调用.zip

    标题中的“c#开发webservice供pb调用”指的是使用C#编程语言开发的Web服务,目的是为了供PowerBuilder(简称PB)应用程序进行调用。Web服务是一种基于互联网的、可互相操作的应用程序接口,允许不同系统之间的数据...

    一个用Delphi写的Base64编码DLL以及PB调用例子

    标题 "一个用Delphi写的Base64编码DLL以及PB调用例子" 提供的信息表明,这是一个使用 Delphi 编程语言开发的动态链接库(DLL),该库实现了Base64编码功能。Base64是一种用于将二进制数据转换为ASCII字符的编码方式...

    PB11.0与.NET白皮书

    3. **调用.NET组件:** 开发者可以直接从PowerBuilder代码中调用.NET组件的方法,极大地增强了应用的灵活性和扩展性。 4. **非可视化对象作为Web服务:** PowerBuilder允许开发者将非可视化对象(Non-Visual ...

    pb11呼叫assembly

    在这一场景下,PowerBuilder开发者能够利用.NET平台的强大功能,尤其是通过调用.NET Assembly(程序集)来扩展PB11的应用能力。以下将详细介绍这个过程以及相关的知识点。 **PowerBuilder 11 (PB11)**: Power...

    Using PowerBuilder Nonvisual Assemblies in VS.Net - Sample Code.zip

    3. **导入.NET组件到PowerBuilder**:在PowerBuilder中,通过“工具”菜单选择“.NET引用”,添加刚才编译好的DLL文件,使PowerBuilder能识别并调用.NET组件。 4. **设计PowerBuilder应用**:在PowerBuilder中创建...

Global site tag (gtag.js) - Google Analytics