`
biqing0427
  • 浏览: 57261 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于c#调用C++代码的一些应用的体会

阅读更多

1.dll函数的导入:
    关键字:unmanaged code ; managed code;
    具体应用类:System.Runtime.InteropServices
    具体使用方法:
    [DllImport("muParser.dll", EntryPoint = "mupSetExpr", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
     public static extern void mupSetExpr(void* parser_handle, StringBuilder a_szExpr);
    注意点:EntryPoint 同函数名  CharSet 注意 不要轻易使用 uncode.
           函数参数 要使用指针时 应该使用 unsafe

2.函数指针的使用:
    关键字:delegate
    具体使用方法:
    c++: typedef double (*fun_type1)(double);
    c#:public delegate double  fun_type1(double);
    注意点:c#使用委托 方法,实现函数指针,使用时 c++中的指针去掉
           参数定义很c++一样
           
3.定义指针值
    关键字:fixed
    具体使用说明:主要是想返回指针地址,c#中好像不支持 &(可能不准确)
                 直接给指针赋值也不行
    example:
    public double* AddVariable()
    {
         fixed ( double * ptrVar = &afValBuf )
         {
             return ptrVar;
         }        
    }
    说明:相关这个指针变量都要在 fixed 里面
    
4.关于c++函数参数是 char* 的操作
    关键字:StringBuider
    具体使用说明:c++中参数char*操作是 一个字节一个字节读取的,
                 c#中的String 是 两个字节读取的 所以不能用
                 所以只用StringBuilder替代
                 
                 现在还没有找到更好的方法,如果有的话告之


5.关于dll的导入
     如果c++中dll 不是组件形式(或者COM),那么不能直接通过.NET的reference 直接应用
     我的解决方法:
         应用平台:.net website
         方法:  建立ClassLibrary 将要应用的dll放在bin下 然后编译工程 使用新生成的dll 就可以了
         
6.关于c#中使用指针:
      关键字:unsafe
      使用方法:在需要使用指针的地方 加 unsafe

分享到:
评论
4 楼 linkerlin 2010-03-30  
推荐C++/CLI
3 楼 ray_linn 2010-03-12  
CharSet 注意 不要轻易使用 unicode.....

CharSet应该尽量使用unicode或者CharSet.auto, Windows本身是以unicode为标准的,所有的ansi都是unicode的wrapper.
2 楼 lyong757 2010-03-12  
正准备做一个c的库函数转到C# 看看 不说话
1 楼 healer_kx 2010-02-25  
这个总结。。。 。。。基本上就两大类方法,
P/Invoke
C++/CLI

前者简单,易学,后者效率高。

相关推荐

    C#调用C++代码完整实例

    本实例将详细讲解如何使用C#调用C++代码,通过DLL动态链接库实现功能。 首先,我们需要了解C#和C++之间的互操作性是通过`Platform Invoke (P/Invoke)`和`.NET Framework`的`Common Language Runtime (CLR)`实现的。...

    C#调用C++DLL导出类

    总结来说,C#调用C++DLL中的类主要涉及以下几个步骤: 1. 在C++DLL中定义导出类及其方法。 2. 在C#中使用DllImport加载DLL,并定义C风格的函数接口。 3. 创建一个C#托管类,持有C++对象的指针,并提供相应的C#方法...

    C#调用C++动态DLL

    在C#中调用C++编写的动态链接库(DLL)是一种常见的跨语言通信方式,特别是当C++库提供了某些C#中没有的功能或者优化的性能时。本文将详细探讨如何在C#中实现对C++动态DLL的调用。 首先,了解动态链接库(DLL)的...

    C#调用C++的动态库Dll示例(含UsbLibDotNet使用)

    1.C#调用C++封装的动态库dll 2.结构体含union共同体的C++转C#示例 3.C#结构体指针的调用演示 4.C#读取USB数据设备的示例 5.C#动态调用C++dll库示例 6.C#静态调用C++dll库示例 注意:UsbLibDotNet使用时候需要先安装...

    C#调用C++ Dll关于结构体数组引用的传递及解析使用的展示代码

    ### C#调用C++ DLL:结构体数组引用的传递及解析使用详解 #### 引言 在跨语言编程环境中,经常会遇到不同编程语言之间进行交互的需求。C#与C++之间的互操作就是一个典型场景。当C#需要调用C++开发的动态链接库...

    C#调用C++ Api或接口转换工具

    首先,C#调用C++ API主要通过以下两种方式: 1. **P/Invoke(Platform Invoke)**:这是.NET Framework提供的一种机制,允许C#代码直接调用本地DLL中的函数。通过定义对应的委托类型和DllImport特性,可以指定C++库...

    C#调用C++的代码

    在某些场景下,如利用C++编写的高性能库,或者集成已有的C++组件到C#项目中,就需要实现C#调用C++的代码。本文将详细讲解如何在C#中调用C++库,并基于提供的"C#调用C++Demo"来分析相关知识点。 1. **P/Invoke(平台...

    c#调用c++DLL,dll有二维数组

    标题中的“c#调用c++DLL,dll有二维数组”意味着我们将在C++的DLL中定义一个二维数组,然后在C#中调用该函数并处理这个数组。在C++中,二维数组通常以指针的形式传递,因为C++不支持引用参数。而在C#中,我们通常...

    c#调用c++ dll 传参 string 崩溃的一种解决办法

    ### c#调用c++ dll 传参 string 崩溃的一种解决办法 在跨语言编程环境中,我们经常需要在不同编程语言之间进行交互。一个常见的场景是C#调用C++编写的动态链接库(DLL)。然而,在这种情况下可能会遇到一些问题,...

    C#调用C++调用实例

    本示例“C#调用C++调用实例”正是探讨了如何在C#应用程序中有效地调用C++代码。 C#与C++之间的互操作性主要通过微软的COM(Component Object Model)或者P/Invoke(Platform Invoke)技术实现。COM允许创建跨语言的...

    C#调用C++DLL动态库.rar_C#调用C++DLL动态库_c++dll动态库_c++开发动态库

    C#调用C++ DLL时可能会遇到异常,例如找不到DLL或函数,或者参数不匹配。因此,需要适当的错误处理机制,例如使用`try-catch`块。 7. **平台兼容性**: 跨平台开发时,需要注意C++ DLL是否适用于目标平台(如x86...

    C#调用C++动态库中自身定义的回调函数

    总结来说,C#调用C++动态库并处理回调函数的关键在于正确地定义C++的函数接口,创建匹配的C#委托类型,使用P/Invoke进行调用,并注册合适的回调方法。这种技术在需要高性能计算、利用现有C++库或者与其他系统交互时...

    C#调用C++动态库实例程序,地址映射传参,

    首先,`C#调用C++动态库实例程序`表明我们需要创建一个C++ DLL,然后在C#应用程序中使用它。C++动态库允许我们编写低级别的代码,这在处理系统级任务或优化性能时非常有用。C#作为.NET框架的一部分,提供了丰富的...

    C#调用C++动态库,执行回调函数并传递结构体参数

    首先,C#调用C++动态库是通过P/Invoke实现的,这是一种.NET Framework提供的特性,允许托管代码(如C#)调用非托管代码(如C++)。为了进行调用,我们需要在C#中定义与C++接口一致的委托类型和结构体类型,以匹配C++...

    C# 调用C++DLL(函数参数包含指针)

    总结来说,C#调用C++DLL并处理指针参数涉及到P/Invoke、函数原型声明、指针类型映射、内存管理和异常处理等多个环节。理解这些细节是成功进行跨语言互操作的关键。在实际开发中,务必确保所有操作都遵循安全规范,以...

    C#winform调用C++库案例,使用C++编写动态库,然后再用C#调用当前C++编写的动态库

    3. **P/Invoke**:C#调用C++ DLL需要使用平台调用服务(P/Invoke)。在C#代码中,使用`DllImport`属性来声明C++函数。 ```csharp using System; using System.Runtime.InteropServices; public partial class ...

    C#调用C++(包括C++的opencv)

    在IT行业中,跨语言编程是常见的...综上所述,C#调用C++,特别是涉及OpenCV这样的库,需要深入了解C++、C#和.NET互操作性,以及内存管理和数据结构转换。通过遵循这些步骤,你可以在C#项目中有效利用C++的OpenCV功能。

    C#调用c++函数的dll文件,同时实现c++调用c#函数

    本示例展示了如何在C#和C++之间实现互操作性,即C#调用C++编写的动态链接库(DLL)函数,同时C++也能调用C#的方法。这主要依赖于.NET框架提供的互操作特性,如C++/CLI(C++的.NET版本)和P/Invoke(Platform Invoke...

    C#使用CLR调用C++的DLL库

    本主题将详细介绍如何在C#应用中利用CLR调用C++编写的DLL库,特别是在Windows环境下。我们将分为三个关键步骤进行讲解: 1. **创建C++ DLL库** - 首先,你需要创建一个C++动态链接库(DLL)项目。在Visual Studio...

    c# 调用C++编写 的DLL函数各种参数传递问题。

    C# 调用 C++ 编写的 DLL 函数各种参数传递问题 在 C# 调用 C++ 编写的 DLL 函数时,参数传递是一个非常重要的部分。这篇文章将详细介绍 C# 调用 C++ 编写的 DLL 函数各种参数传递问题,包括不返回值的参数、带...

Global site tag (gtag.js) - Google Analytics