混合編程
⑴ 請問怎麼C++和C#混合編程
僅僅是為了xml的話,可以去找找xml的c++庫啊。
1、Xerces
參考網站:http://xml.apache.org/xerces-c/
Xerces-C++ 是一個非常健壯的XML解析器,它提供了驗證,以及SAX和DOM API。XML驗證在文檔類型定義(Document Type Definition,DTD)方面有很好的支持,並且在2001年12月增加了支持W3C XMLSchema 的基本完整的開放標准。
2、XMLBooster
參考網站:http://www.xmlbooster.com/
這個庫通過產生特製的parser的辦法極大的提高了XML解析的速度,並且能夠產生相應的GUI程序來修改這個parser。在DOM和SAX兩大主流XML解析辦法之外提供了另外一個可行的解決方案。
3、Pull Parser
參考網站:http://www.extreme.indiana.e/xgws/xsoap/xpp
這個庫採用pull方法的parser。在每個SAX的parser底層都有一個pull的parser,這個xpp把這層暴露出來直接給大家使用。在要充分考慮速度的時候值得嘗試。
4、Xalan
參考網站:http://xml.apache.org/xalan-c/
Xalan是一個用於把XML文檔轉換為HTML,純文本或者其他XML類型文檔的XSLT處理器。
5、CMarkup
參考網站:http://www.firstobject.com/xml.htm
這是一種使用EDOM的XML解析器。在很多思路上面非常靈活實用。值得大家在DOM和SAX之外尋求一點靈感。
6、libxml++
http://libxmlplusplus.sourceforge.net/
libxml++是對著名的libxml XML解析器的C++封裝版本。
還有個小巧的
TinyXML
http://www.hansencode.cn/2007/06/tinyxml-chinese-doc.html
TinyXML是一個簡單小巧,可以很容易集成到其它程序中的C++ XML解析器。
⑵ matlab與才c/c++混合編程
用Matlab編譯C語言生成的代碼效率並不高.如果真想有效的在Windows環境下調用數學工具的鏈接庫或com文件,建議還是用Microsoft Math v3.0.
⑶ 匯編語言和C語言混合編程時,它們之間是如何傳遞參數的請用具體例子說明
變數本質就是一個內存地址,所以把變數負值到寄存器就可以了,比如這樣__asm mov eax, var,如果是函數,跟c函數一樣調用,當然,也可以用匯編寫一個動態鏈接庫,然後用c調用,你可以把c程序逆向一下,就可以看到它們的對應關系了,呵
⑷ C/C++與匯編混合編程有什麼好處
當需要C/C++與匯編混合編程時,可以有以下兩種處理策略:
若匯編代碼較短,則可在C/C++源文件中直接內嵌匯編語言實現混合編程。
若匯編代碼較長,可以單獨寫成匯編文件,最後以匯編文件的形式加入項目中,通過ATPCS規定與C程序相互調用及訪問。
後綴.S文件中的匯編指令是用armasm匯編器進行匯編的,而C語言程序中的內嵌匯編指令則是用內嵌匯編器進行匯編的。這兩種匯編器存在一定的差異,所以在內嵌匯編時要注意以下幾點。
2.3.1 小心使用物理寄存器
必須小心使用物理寄存器,如R0~R3、IP(R12)、LR(R14)和CPSR中的N、Z、C、V標志位。因為計算匯編代碼中的C表達式時,可能使用這些物理寄存器,並會修改N、Z、C、V標志位。
如計算:
y=x+x/y;
[cpp] view plain
1. __asm
2. {
3. MOV R0, x //把x的值給R0
4. ADD y, R0, x/y //計算x/y時R0的值會被修改
5. }
2.3.2 內嵌匯編程序中允許使用C變數
在計算x/y時R0會被修改,從而影響R0+x/y的結果。內嵌匯編程序中允許使用C變數,用C變數來代替寄存器R0可以解決上述問題。這時內嵌匯編器將會為變數var分配合適的存儲單元,從而避免沖突的發生。如果內嵌匯編器不能分配合適的存儲單元,它將會報告錯誤。
[cpp] view plain
1. int var;
2. __asm
3. {
4. MOV var, x //把x的值給R0
5. ADD y, var, x/y //計算x/y時R0的值會被修改
6. }
2.3.3 不需要保存和恢復用到的寄存器
對於在內嵌匯編語言程序中用到的寄存器,編譯器在編譯時會自動保存和恢復這些寄存器,用戶不用保存和恢復這些寄存器。除了CPSR和SPSR寄存器外,其他物理寄存器在讀之前必須先賦值,否則編譯器會報錯。
[cpp] view plain
1. int fun (int x)
2. {
3. __asm
4. {
5. STMFD SP!, {R0} //保存R0,先讀後寫,匯編出錯
6. ADD R0, x, #1
7. EOR x, R0, x
8. LDMFD SP!, {R0} //多餘的
9. }
10. return x;
11. }
⑸ 什麼是絕對編程增量編程和混合編程
絕對編程,是以工件原點進行編程,例如法蘭克,西門子系統,使用G54坐標系,就需要建立工件坐標系G54(原點),程序的所有坐標(距離)都是以原點計算的(位置),使用G90代碼,不允許使用G91代碼。
增量編程,只使用G91代碼,使用G91後才是增量編程,以G91出現的前一個點為原點,進行編程,程序所有坐標都是以該原點計算的。
混合編程,應該就是同時使用G90和G91,G90和G91是模態代碼,出現G90之後(沒有出現G91之前)一直是絕對編程,出現G91之後(沒有出現G90之前)一直是增量編程。
⑹ 什麼是數控混合編程
數控機床編程時,可採用絕對值編程、增量值編程或二者混合編程。
1、絕對值編程
絕對值編程是根據預先設定的編程原點計算出絕對值坐標尺寸進行編程的一種方法。即採用絕對值編程時,首先要指出編程原點的位置,並用地址x、Z進行編程(X為直徑值)。有的數控系統用G90指令指定絕對值編程。
2、增量值編程
增量值編程是根據與前一個位置的坐標值增量來表示位置的一種編程方法。即程序中的終點坐標是相對於起點坐標而言的。採用增量值編程時,用地址U、W代替X、Z進行編程。
3、混合編程
絕對值編程與增量值編程混合起來進行編程的方法叫混合編程。編程時也必須先設定編程原點。
⑺ vb和python混合編程
vb跟python之間沒有一個可交互的橋梁,所以是不能實現混合編程的。不過VS2019已經完美支持python,也許Python跟VB.net混合編程會成為可能。
⑻ 為什麼要C和匯編混合編程
依我的看法,上面兩位說的都不對:
一樓:匯編語言是低級語言直接往硬體的寄存器里寫入東西:
其實C語言和匯編語言都一樣,都會編譯成二進制文件機器語言燒錄到單片機中,所以沒有一樓所說的區別
二樓:在C中也不會有數據損失的,如果你定義好數據類型的話。
單片機中是將C編譯成匯編,然後根據匯編編譯成機器語言---可執行文件;
其實單片機中經常在C中嵌入匯編,主要是因為時間的關系,因為一條匯編語言執行的時間都是可以知道的,而C指令執行的時間是不可知的,因為C編譯器不一樣,編譯後的匯編也是不一樣的,如果用匯編就不會有這種情況。所以在一些精確延時的場合,要嵌入匯編
另外,C的可移植性較強,不同的單片機里,功能要求相同的可以直接拿去用
總之,匯編是程序員可以自己翻譯成機器語言的,所以單片機的運行是可以完全掌握的
⑼ 多語言混合編程
起始所有程序都是一樣的,最終都是機器碼,只是在編寫時使用的語言不同(編程語言都是程序的抽象,為了編程方便,本身並不是可運行的程序,最終必須編譯成機器碼才能運行,不同語言只是不同人編的,用的語法不同),你寫的源文件無論是任何語言寫的,最終編譯的結果都是機器碼。 函數調用在機器碼就是很簡單的一步,將參數表要求的參數值放入堆棧(順序有約定),然後使用 jmp 指令跳轉到要調用的函數的函數地址即可,別的程序不管你怎麼實現,只要你告訴我參數表,和函數地址就能調用,所有程序最終都是機器碼,自然也符合這個規則。。。 所以實現互調,只要將對方的介面程序文件映射到自己的進程中,然後預先知道他的參數表,得到他的介面函數地址,將參數放入堆棧,然後跳轉到函數地址, 這樣你就實現調用。。。。 winodws提供了一個文件類型叫做.dll 動態鏈接庫,如果你希望讓其他程序調用,只用將文件編譯成dll即可,他就是一個程序文件,純機器碼,可以讓任何程序調用。。。。
具體實現方法,通過loadliabroray("xxxxx\xxx.dll"),將該文件映射到進程,getprocaddress("函數名"),得到他的函數地址,假設你已經知道這個函數格式為 int func(int,int,char),你就定義一個該類型的函數指針 ,將getprocaddress("函數名")的地址給這個函數指針,按C語言格式調用即可,很簡單的,這些都是操作系統的功勞,如果你學學windows系統編程,就知道了。。。
還有一種方式是,把另一個程序當做一個伺服器程序,通過約定的數據來間接調用。。。。比如有個字元串,叫「吃飯」,你只要將這個「吃飯」這兩個字發給另一個程序(操作系統提供了一個叫管道的內核對象,通過它,你可以給也使用該管道的程序發數據),他實現編了程序知道這是要干什麼,然後就自己執行。。。
⑽ 最近在搞C\C++ 和匯編語言 的混合編程,如何講2者在編譯環境中連接起來。
詳細的官方資料見masm
programmer's
guide
中的第12章
混合語言編程,網上有pdf版本,但有一些版本的無法顯示圖片,好好的看一下吧。
----------------------------------------
混合編程允許你把微軟Basic、C、C++和FORTRAN的長處與匯編語言常式聯合起來。這些語言中的任何一種都可以調用MASM常式,你也可以在匯編程序里調用這些語言中的任何一種。這實際上使混合語言程序可以使用所有高級語言庫的常式。
MASM
6.1提供的混合語言特徵類似於高級語言里提供的特徵。例如,你可以使用INVOKE直接調用高級語言過程,匯編器為你處理參數傳遞的細節。你也可以使用H2INC把C頭文件翻譯為MASM的include文件,這在第20章的Environment
and
Tools里解釋。
MASM
6.1的混合語言特徵沒有廢棄舊的定義混合語言介面的方法。在大多數情形下,使用較早版本的MASM編寫的混合語言程序可以在MASM
6.1里正確地匯編和連接(為了解更多的信息,見附錄A)。
本章解釋了如何編寫高級語言模塊可以調用的匯編常式,MASM如何調用高級語言常式。你應該已經理解你希望聯合的語言,應該知道如何使用這些語言編寫、編譯和連接多模塊程序。
本章僅覆蓋了C、C++、Basic和FORTRAN的匯編語言介面,沒有覆蓋高級語言間的混合編程。此處的重點是微軟版本的C、C++、Basic和FORTRAN,但相同的原則適用於其他語言和編譯器。本章使用的許多技巧使用了第7章里的關於使用匯編語言編寫過程,以及第8章的多模塊編程的資料進行解釋。