我的算法包含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
答案 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有很多约束,这就是为什么你的代码保持呕吐错误。