2012-07-19 86 views
1

我的算法包含C和asm代碼。我需要在C#應用程序中調用此算法。我想知道是否可以將C和asm代碼轉換爲DLL,然後在C#控制檯應用程序中調用它。但我很不清楚如何將耦合的C和asm代碼算法轉換爲DLL。任何幫助表示讚賞。使用C和asm代碼將程序轉換爲DLL

我知道如何使用PInvoke在C#中調用DLL。我的問題是將合併的C和asm代碼轉換爲DLL。當我嘗試使用extern「C」和dllexport時,VS 2010保持嘔吐錯誤。有超過90個錯誤!大多數錯誤都是抱怨C++不支持我使用的東西(雖然它們在C中是有效的)。例如像這行代碼:

const u8 *error_string_base="ERROR: "; 

給出了一個

error C4430: missing type specifier -int assumed. Note C++ does not support default-int

+1

嘗試並保持您的問題爲重點。如果您知道如何從C#調用DLL,那麼甚至不要提及它。如果我們不知道它們是什麼,我們無法幫助您解決錯誤。 – 2012-07-19 03:02:12

回答

2

是的,你可以調用非託管代碼是從C#的DLL。

Platform Invocation Services (PInvoke) allows managed code to call unmanaged functions that are implemented in a DLL.

http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx

你可能會想看看從C#

http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx#pinvoke_callingdllexport

UPDATE調用DLL直接出口的話題(根據您的修改)

Compil > C/C++ - - >高級 - >爲編譯,然後選擇 'C'

+0

感謝您的回覆。但是,我知道如何使用PInvoke在C#中調用DLL。我的問題是將合併的C和asm代碼轉換爲DLL。當我嘗試使用extern「C」和dllexport時,VS 2010保持嘔吐錯誤。有任何想法嗎? – Shambavi 2012-07-19 02:54:10

+1

@Shambavi,你需要包含錯誤和導致錯誤的行,以便任何人回答你的問題。 – shf301 2012-07-19 02:56:12

+0

有超過90個錯誤!大多數錯誤都是抱怨C++不支持我使用的東西(實際上在C中有效)。例如,下面這行代碼:const u8 * error_string_base =「ERROR:」;給出錯誤C4430:缺少類型說明符-int。注意C++不支持default-int – Shambavi 2012-07-19 03:04:31

0

更好的方法是創建一個DLL應用程序(COM DLL或電子郵件您在C模式下,而不是C++模式

進入屬性的應用其他),並寫VC++ 你的代碼,這是非常類似於C,你也可以合併這樣

__asm { 
     mov al, 2 
     mov dx, 0xD007 
     out dx, al 
     } 

你的彙編代碼,我的意思是使用__asm keyword.Creating DLL應用程序是不是一個大問題網上有很多資源。導入和導出DLL有很多約束,爲什麼你的代碼保持嘔吐錯誤。

+0

非常感謝Alok!我會嘗試使用VC++和__asm關鍵字。我應該爲所有.h和.c文件使用extern「C」嗎? – Shambavi 2012-07-19 03:37:35