1

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

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

const u8 *error_string_base="ERROR: "; 

给出一个

错误 C4430:假定缺少类型说明符 -int。注意 C++ 不支持默认整数

4

2 回答 2

2

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

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

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

您可能需要查看主题Calling a DLL Export Directly from C#

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

更新(基于您的编辑)

在 C 模式而不是 C++ 模式下编译您的应用程序

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

于 2012-07-19T02:51:14.960 回答
0

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

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

,我的意思是使用__asm关键字。创建 dll 应用程序没什么大不了的 .. 网上有很多资源。导入和导出 Dll 有很多限制,这就是为什么你的代码不断呕吐错误。

于 2012-07-19T03:14:57.937 回答