三談 C 互動視窗

2021-07-04 04:18:07 字數 4417 閱讀 1220

mono 2.8.1 中和 csharp.exe 和 mono.csharp.dll 相關的 c# 源程式總共只有六十個左右,分布在以下目錄中:

mono.csharp.dll 需要以下57個 c# 原始檔:

..\..\mcs\anonymous.cs

..\..\mcs\argument.cs

..\..\mcs\assign.cs

..\..\mcs\attribute.cs

..\..\mcs\cs-tokenizer.cs

..\..\mcs\cfold.cs

..\..\mcs\class.cs

..\..\mcs\codegen.cs

..\..\mcs\complete.cs

..\..\mcs\const.cs

..\..\mcs\constant.cs

..\..\mcs\convert.cs

..\..\mcs\context.cs

..\..\mcs\decl.cs

..\..\mcs\delegate.cs

..\..\mcs\doc.cs

..\..\mcs\doc-bootstrap.cs

..\..\mcs\driver.cs

..\..\mcs\dynamic.cs

..\..\mcs\ecore.cs

..\..\mcs\enum.cs

..\..\mcs\eval.cs

..\..\mcs\expression.cs

..\..\mcs\field.cs

..\..\mcs\flowanalysis.cs

..\..\mcs\generic.cs

..\..\mcs\import.cs

..\..\mcs\iterators.cs

..\..\mcs\lambda.cs

..\..\mcs\linq.cs

..\..\mcs\literal.cs

..\..\mcs\location.cs

..\..\mcs\membercache.cs

..\..\mcs\method.cs

..\..\mcs\modifiers.cs

..\..\mcs\namespace.cs

..\..\mcs\nullable.cs

..\..\mcs\parameter.cs

..\..\mcs\pending.cs

..\..\mcs\property.cs

..\..\mcs\report.cs

..\..\mcs\rootcontext.cs

..\..\mcs\roottypes.cs

..\..\mcs\statement.cs

..\..\mcs\support.cs

..\..\mcs\typemanager.cs

..\..\mcs\typespec.cs

..\..\mcs\visit.cs

..\..\mcs\symbolwriter.cs

..\..\class\mono.compilerservices.symbolwriter\monosymbolfile.cs

..\..\class\mono.compilerservices.symbolwriter\monosymboltable.cs

..\..\class\mono.compilerservices.symbolwriter\monosymbolwriter.cs

..\..\class\corlib\mono.security.cryptography\cryptoconvert.cs

..\..\build\common\consts.cs

..\..\tools\monop\outline.cs

..\..\mcs\cs-parser.cs

assembly\assemblyinfo.cs

這是 mcs/class/mono.csharp.dll.sources 檔案的內容。注意在該檔案中的目錄分隔符原來是 linux 作業系統的「/」,現在被我替換為 windows 作業系統的「\」。

而 csharp.exe 只需要以下三個 c# 原始檔:

..\..\class\corlib\mono\dataconverter.cs

repl.cs

getline.cs

console.writeline(ex);
現在,編輯以下 mak.cmd 檔案用來編譯:

@echo off

cd mcs\class\mono.csharp

csc -t:library -out:..\..\..\mono.csharp.dll -d:net_4_0 @mono.csharp.dll.sources > ..\..\..\mono.csharp.txt

cd ..\..\tools\csharp

csc /unsafe -out:..\..\..\csharp.exe -d:on_dotnet -r:..\..\..\mono.csharp.dll @csharp.exe.sources > ..\..\..\csharp.exe.txt

cd ..\..\..

sn -r mono.csharp.dll mcs\class\mono.snk > sn.txt

編譯和執行結果如下:

e:\cs\csharprepl\mono>make:\cs\csharprepl\mono>csharpsystem.typeloadexception: 重寫成員

「mono.csharp.streamreportprinter.print(mono.csharp.abstractmessage)」

時違反了繼承安全性規則。重寫方法的安全可訪問性必須與所重寫方法的安全可訪問性匹配。

在 mono.csharp.evaluator.initandgetstartupfiles(string args)

在 mono.driver.startup(string args)

e:\cs\csharprepl\mono>

[assembly: securityrules(securityruleset.level1)]
然後重新編譯,執行:

e:\cs\csharprepl\mono>make:\cs\csharprepl\mono>csharp --versionmono c# compiler version 4.0.0.0

e:\cs\csharprepl\mono>csharpmono c# shell, type "help;" for help

enter statements below.

csharp>environment.osversion;microsoft windows nt 6.0.6002 service pack 2

csharp>environment.version;4.0.30319.1

csharp>quit;e:\cs\csharprepl\mono>

終於在 windows 作業系統下實現了 c# 互動視窗,並且沒有安裝 mono,而是只需要 mono.csharp.dll 和 csharp.exe 兩個檔案就可以了。

此外,還可以將 mono.csharp.dll 加入到全域性程式集快取中(需要管理員許可權):

e:\cs\csharprepl\mono>gacutil /i mono.csharp.dllmicrosoft (r) .net global assembly cache utility.  version 4.0.30319.1

程式集已成功新增到快取中

e:\cs\csharprepl\mono>gacutil /l mono.csharpmicrosoft (r) .net global assembly cache utility. version 4.0.30319.1

全域性程式集快取包含下列程式集:

mono.csharp, version=4.0.0.0, culture=neutral, publickeytoken=0738eb9f132ed756, processorarchitecture=msil

專案數 = 1

e:\cs\csharprepl\mono>

這樣之後再將 csharp.exe 放到 path 中的目錄裡,就可以隨時隨處執行 c# 互動視窗了。

互動 MFC視窗位置分析

一 單文件子視窗 onsize 中通過傳送wm sizeparent訊息給子視窗,對於單文件而言,子視窗是ccontrolbar的派生類和檢視view類,controlbar的子視窗切去自己占有的矩形區,並用 enddeferwindowpos 來設定,設定之後,對於還有有子窗體,會傳送wm win...

視窗 dialog 與後端互動

與後端互動,一般需要提交表單資料,所以,這次渲染得dialog其實是乙個 使用js的方式渲染表單為對話方塊 其實用window元件也能做登入框,但是考慮到如果使用window元件的話,還得自己編寫兩個 甚至三個 按鈕,所以就使用dialog,直接使用其buttons屬性,在底部渲染出兩個按鈕。以上,...

JS新視窗與父視窗的互動

我們經常會在後台中使用iframe,有時候需要window.open url,title,option 來開啟新視窗,那麼新視窗如何跟父視窗進行互動呢。設定父視窗表單add中intro的值為desc parent.opener.document.add.intro.value desc parent...