前几天刚刚发了一篇 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)
字符串方式
相关推荐
标题 "PB调用.NET COM组件" 涉及的关键知识点主要集中在PowerBuilder(PB)如何与.NET Framework中的COM组件交互。在.NET Framework中,可以通过创建COM互操作组件(也称为托管COM),使得非.NET环境如PB这样的应用...
7. **环境依赖**:注意,由于PowerBuilder是基于.NET Framework 2.0的,所以压缩包中的`NetFx20SP2_x86.exe`可能是.NET Framework 2.0 SP2的安装包,确保PB运行时环境具备调用.NET组件的条件。 通过以上步骤,我们...
标题中的“PB调用C#写的dll文件”指的是在PowerBuilder(PB)应用程序中使用C#编译的动态链接库(DLL)文件。这通常涉及到跨语言互操作性,允许不同编程语言之间的通信和功能共享。 C#是一种现代、面向对象的编程...
【标题】"pb12.net wpf 例题1"涉及的是使用PowerBuilder 12(简称pb12)与Windows Presentation Foundation(WPF)进行应用程序开发的相关实践案例。WPF是.NET Framework的一个重要组成部分,它提供了一种强大的UI...
标题中的“pb调用C#中COM组件实例”是指在PowerBuilder(PB)环境中通过COM(Component Object Model)接口调用由C#语言编写的组件。这种方法允许不同编程语言之间进行互操作,使得PB能够利用C#的强大功能,如.NET ...
C# 调用 PB 的 DLL 文件是指在 C# 程序中使用_pb_(PowerBuilder)开发的 DataWindow.Net 组件来处理数据。DataWindow.Net 是 PB 专门为 MS.Net 开发的数据访问组件,允许开发者在 C# 程序中使用 PB 的功能。 主要...
2. 使用.NET组件:如果你的系统中安装了.NET Framework,可以通过创建.NET代理类来调用.NET中的摄像头库。PowerBuilder 11.5支持.NET互操作性,允许你直接引用.NET DLL。找到一个合适的.NET摄像头库(例如AForge.NET...
这将允许非.NET框架的应用程序(如PB)访问此DLL。 接下来,转到“生成”标签,勾选“为COM互操作注册”。然后,进入“签名”标签,选择“为程序集签名”,点击“选择强名称密钥文件”,然后选择“新建”来创建一个...
标题中的“PB调用c#com组件发送邮件.zip”表明这是一个关于使用PowerBuilder(PB)通过COM组件调用C#编写的邮件发送功能的示例。这个压缩包包含了一整套实现这一功能所需的资源,包括注册和反注册的批处理文件、C#...
描述中提到的“pb12.net wpf/wcf相关应用例题下载”,暗示这些例子可能不仅涉及WPF,还涉及到Windows Communication Foundation(WCF),这是一个.NET框架服务导向架构组件,用于创建分布式系统中的服务。...
标题中的“pb调用C#的com出错问题”涉及到的是两种不同编程语言之间的互操作性,即PowerBuilder(PB)通过COM(Component Object Model)接口调用C#编写的动态链接库(DLL)。COM是一种组件技术,允许不同语言之间...
总的来说,通过PB调用Word编辑数据库中的Word文件,结合了PB的数据处理能力和Word的文档编辑能力,为用户提供了一种无缝集成的解决方案。这一过程需要对PB、数据库操作、Word对象模型以及OLE自动化有深入的理解和...
.NET Bridge是PowerBuilder的一个组件,它允许PB应用程序直接调用.NET Framework中的类库,包括Web服务。开发者可以使用PB的.NET DataWindow对象,通过拖放操作将Web服务的方法添加到数据窗口中,然后在代码中执行...
标题中的“PB调用IC卡读卡器程序例子代码”是指使用PowerBuilder(PB)这一编程工具来与IC卡读卡器进行交互的示例代码。在IT领域,这种交互通常涉及到通过API(应用程序编程接口)调用来实现硬件设备如IC卡读卡器的...
标题中的“c#开发webservice供pb调用”指的是使用C#编程语言开发的Web服务,目的是为了供PowerBuilder(简称PB)应用程序进行调用。Web服务是一种基于互联网的、可互相操作的应用程序接口,允许不同系统之间的数据...
标题 "一个用Delphi写的Base64编码DLL以及PB调用例子" 提供的信息表明,这是一个使用 Delphi 编程语言开发的动态链接库(DLL),该库实现了Base64编码功能。Base64是一种用于将二进制数据转换为ASCII字符的编码方式...
3. **调用.NET组件:** 开发者可以直接从PowerBuilder代码中调用.NET组件的方法,极大地增强了应用的灵活性和扩展性。 4. **非可视化对象作为Web服务:** PowerBuilder允许开发者将非可视化对象(Non-Visual ...
在这一场景下,PowerBuilder开发者能够利用.NET平台的强大功能,尤其是通过调用.NET Assembly(程序集)来扩展PB11的应用能力。以下将详细介绍这个过程以及相关的知识点。 **PowerBuilder 11 (PB11)**: Power...
3. **导入.NET组件到PowerBuilder**:在PowerBuilder中,通过“工具”菜单选择“.NET引用”,添加刚才编译好的DLL文件,使PowerBuilder能识别并调用.NET组件。 4. **设计PowerBuilder应用**:在PowerBuilder中创建...