在C#中调用C/C++代码

 示例1: HelloWorld程序
using  System;
using  System.Runtime.InteropServices;
class  MyClass 
{
   [DllImport(
"User32.dll")]
   
public static extern int MessageBox(int h, string m, string c, int type);

     
public static int Main() 
      
{
            
MessageBox(0"HelloWorld""A Message Box"0);
               return 0;
      }

}

        运行这个程序会弹出一个 HelloWorld 的对话框, 效果和 Windows程序设计 上那个一样.  这段代码用到了两个技术:  一个是extern关键字,一个是 DllImportAttribute 属性. 
       extern用来修饰一个函数, 表示这个函数在类的外部实现.        DllImportAttribute 属性引入一个DLL库,指示该属性化方法由非托管动态链接库 (DLL) 作为静态入口点公开,  通常跟extern一起使用.     用DllImportAttribute 属性时别忘了命名空间System.Runtime.InteropServices

示例2:  调用C/C++代码的具体步骤

被调用的C/C++代码

//  文件名: called.cpp
int  __declspec(dllexport) MyMethod( int  i)
{
   
return i*10;
}

(1)将 called.cpp 编译成 dll 文件
        命令格式:  cl  /LD /MD  called.cpp
(2) 用C#调用 MyMethod 函数

using  System;
using  System.Runtime.InteropServices;
public   class  MyClass 
{
   [DllImport(
"called.dll",
     EntryPoint
="MyMethod",    
     CharSet
=CharSet.Unicode,  
  CallingConvention
=CallingConvention.StdCall)]
  ]
   
public static extern int ExternMethod(int x);

   
public static void Main() 
{
      Console.WriteLine(
"Externally Called MyMethod() returns {0}.", ExternMethod(5));
   }

}

其中EntryPoint是外部函数的入口点,  在 这里是“MyMethod“.

好了现在运行这个程序,结果是不是调用了 MyMethod,  呵呵.   当然了,这只是个很小的Demo, 并没有很全面的讲解实际运作中会遇到的所有问题, 比如, C/C++ 与 C# 类型转换, C/C++没有内置string类型那.  等等.  不过麻雀虽小,五脏俱全,大体的调用框架是有了. 哈.

要求和注意问题:调用的C/C++代码必须是普通函数或静态函数, 不能是类的函数成员.  C#中的extern函数只能是静态的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值