使用C和asm代码将程序转换为DLL

问题描述:

我的算法包含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

是的,你可以调用非托管代码是从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

更好的方法是创建一个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