2012-08-23 85 views
2

我見過直列從C++ Visual Studio 2010中稱爲32位.ASM,所謂的x64使用微軟的__fastcall協議和整個「外部C」標頭的事情一個C++項目手寫.ASM文件,但我不知道請參閱C#中的等效語言(我的首選語言)。從C#調用x64 .asm文件?

從C#文件,有沒有辦法來調用在C#Winforms應用程序手寫的64位.asm的文件?

+1

基本上是 - 但你需要使用「不安全」的代碼來實現...你爲什麼要這麼做? – Yahia

+0

函數的C++聲明是什麼樣的?您可能可以將呼叫掛接到該程序集中。 –

+0

它是巨型(> 500mb)位圖的基本圖形資料(亮度,飽和度,對比度)。如果我理解正確,Pinvoke是32位的? – BitPass

回答

1

如果你真的需要從C#例如參見here執行彙編代碼 - 使用unsafe代碼,指針unamaged代表和包含二進制形式彙編的字節數組...

+0

這是x86,是否沒有x64? (或x86-64) – BitPass

+0

真的很喜歡失敗。正確的方法是,如果存在這樣的事情,它將VirtualAlloc的某些內存實際標記爲可執行文件。 – harold

+0

它與兩個(32位和64位) - 它的工作原理與任何處理器構建築在運行OND只要你使用正確的指令集......它可能因安全措施未來失敗所以'VirtualAlloc'路線是「更安全」,雖然整個事情是不安全的... – Yahia

0

嘗試尋找在This code project。它描述了將彙編混合到C++中然後在C#中調用C++程序集的技術。

+0

完成,在C++,但使用的寄存器像RAX(64位)而不是EAX(32位)。編寫調用C++文件的C#文件僅用於調用64位asm是不是很奇怪? – BitPass

+0

老實說,使用匯編看起來很奇怪,更不用說C#中的大多數非託管代碼,所以黑客應該是不必要的。如果我需要有優化組裝或諸如此類的東西我會寫那些部分爲C++ DLL反正 – secretformula

+0

這就是我最初以爲,但我使用的x64 MASM在C++ DLL得到了3到6倍的速度提升。我想優化編譯器仍然沒有得到那種基本的Photoshop濾鏡所具有的真正光滑的專業感覺。 – BitPass