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

时间:2012-07-19 02:50:00

标签: c# c dll assembly

我的算法包含C和asm代码。我需要在C#应用程序中调用此算法。我想知道我是否可以将C和asm代码转换为DLL,然后在C#控制台应用程序中调用它。但我还不清楚如何将耦合的C和asm代码算法转换为DLL。任何帮助表示赞赏。

我知道如何使用PInvoke在C#中调用DLL。我的问题是将组合的C和asm代码转换为DLL。当我尝试使用extern" C"时,VS 2010会出现呕吐错误。和dllexport。有超过90个错误!!大多数错误都是抱怨C ++不支持我使用过的东西(尽管它们在C中有效)。例如,这行代码:

const u8 *error_string_base="ERROR: "; 

给出

  

错误C4430:缺少类型说明符-int假设。注意C ++不支持default-int

2 个答案:

答案 0 :(得分:2)

是的,您可以从C#调用DLL中的非托管代码。

  

平台调用服务(PInvoke)允许托管代码调用DLL中实现的非托管函数。

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

您可能希望查看主题直接从C#调用DLL导出

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

更新(根据您的修改)

以C模式而不是C ++模式编译应用程序

转到属性 - > c / c ++ - >高级 - >编译为并选择'c'

答案 1 :(得分:0)

更好的方法是创建一个DLL应用程序(COM DLL或其他)并在VC ++中编写代码 ,这与C非常相似,你也可以像这样合并你的asm代码

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

,我的意思是使用 __ asm 关键字。创建dll应用程序并不是什么大问题。网上有很多资源。导入和导出Dll有很多约束,这就是为什么你的代码保持呕吐错误。