8

VBScriptでは、COM自動化を使用して特定の.netクラスを使用できます。これは、動的配列、リスト、キューなどを使用する場合に便利です。

文字列をオブジェクトとして使用できればいいので、それを使ってすべての凝った文字列を実行できますが、別のオブジェクトから文字列を渡すと、VBScriptでは文字列オブジェクトとしてではなく文字列として表示されます。

Set s = CreateObject("System.Text.StringBuilder")
s.Append_3 "I love deadlines. I like the whooshing sound they make as they fly by."

' This gives me the literal string
MsgBox s.ToString
text = s.ToString

' But unfortunately this won't work
MsgBox s.ToString.Length
Set stringRef = s.ToString

また、COMオブジェクトとして文字列を作成することはできません。

Set s = CreateObject("System.String")      ' Nope.

これを管理した人、またはそれについて他の考えを持っている人はいますか?

4

2 に答える 2

7

すべてではなく、いくつかのメソッドとプロパティを使用できます。以下は機能しますが、 toString を使用した瞬間から、そのように動作する vbscript 変数があります。

Set s = CreateObject("System.Text.StringBuilder")
s.Append_3 "I love deadlines. I like the whooshing sound they make as they fly by."
s.Append_3 "and the rest."
wscript.echo s.Length
wscript.echo s.Capacity
wscript.echo chr(s.chars(0))
wscript.echo s.Replace("t", "d").Replace("l", "k").toString

与える

83
140
I
I kove deadkines. I kike dhe whooshing sound dhey make as dhey fky by.and dhe resd.

しかし、たとえば、stringbuilder のメソッドですが、次は機能しませんhttp://msdn.microsoft.com/en-us/library/system.text.stringbuilder_methods.aspx 理由は聞かないでください

s.Insert 1, "insert this"

s.Insert_2 7, "insert this"

動作します

また、これらのオブジェクトを使用できる Ruby でもプログラムしますが、同じ動作です。一部のオブジェクトでは、Excel などのプロパティまたはメソッドを列挙できます。

require 'win32ole'
excel = WIN32OLE.new('Excel.Application')
properties = excel.ole_get_methods
properties.each do |property|
  p property.to_s
end

次のような非常に長いリストを提供します

"Application"
"Creator"
"Parent"
"ActiveCell"
"ActiveChart"
"ActiveDialog"
"ActiveMenuBar"
"ActivePrinter"
"ActiveSheet"
"ActiveWindow"
"ActiveWorkbook"
etc etc

しかし、System.Text.Stringbuilder の場合はそうではありません。プログラマーがメソッドとプロパティを外部に公開する方法が原因だと思います。

残念ながら、vbscript で System.String を直接使用することはできないと思います。

于 2012-08-07T22:44:39.230 に答える
0

やってみました。Msgbox len(s.ToString) または単に MsgBox(s.Length)

または、独自の .Net クラスを作成し、公開したい静的文字列関数のラッパーとして機能する com に公開することもできます...

于 2012-05-14T11:52:34.807 に答える