小弟一個程式中需要實作動態代碼,即在程式運行程序中生成代碼,寫成字串,再用ExecuteStatement來執行字串中的代碼,如下所示,測驗后發現可以運行,但是里面的變數的值不對,估計是作用域出了問題,如下,在ExecuteStatement “a=5”之后,外面更改了a=3,再運行ExecuteStatement "msgbox a"時a依舊是5,需求是在ExecuteStatement中更改了變數的值,在外面也跟著更改,而在外面更改了變數的值之后也一樣,不知道該如何處理,非常感謝!
Private Sub Command1_Click()
Dim a As Integer
Dim ob As Object
Set ob = CreateObject("scriptcontrol")
ob.Language = "VBscript"
ob.ExecuteStatement "a = 5"
a = 3
ob.ExecuteStatement "msgbox a"
uj5u.com熱心網友回復:
這恐怕不行,特別是“外面的”更不可能改到“里面的”。用這種方法,就算“里面的改外面的”可能也比較難。
你那些“動態代碼”明顯是屬性解釋執行的代碼,
而“外面的”變數,是編譯時確定了記憶體地址的,
它們之間沒有任何關聯。
不知道scriptcontrol的腳本強大到何種地步,
反正覺得即使想實作“里面的改外面的”,也不是那么好辦的事。
uj5u.com熱心網友回復:
感覺樓主應該換個思路來解決問題。這個動態代碼估計有很大局限的
uj5u.com熱心網友回復:
直接改變數是不行的.正好以前做過類似的一件事, 折騰了半天也算達到目的了.
你得先搞一個類, 把你需要改變的值定義為這個類的公有變數.
比如說:
clase sss
public a as string
...
end clase
然后你在程式內部實體化:
dim SS as new sss
然后你就可以script或者callbyname了, (實際上對著一個變數你能做的也就是賦值而已)
uj5u.com熱心網友回復:
請自行將以下“A語言”替換為“VB6”,“B語言”替換為“VB6中的動態代碼”:不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml
共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……
“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!
uj5u.com熱心網友回復:
里面/外面底層/上層
本機/遠程
國內/國外
Windows/Linux
通用OS/嵌入OS
英文/漢字
老舊環境/最新環境
8位/16位/32位/64位
……
通吃!
uj5u.com熱心網友回復:
趙4復讀機果然名不虛傳!你得把變數A這個物件傳進去才行。
寫法不對。
uj5u.com熱心網友回復:
過獎!過獎!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/66969.html
標籤:API
