V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
windplume
V2EX  ›  问与答

有哪位大神了解 C#和 C++互操作、数据封送的。

  •  
  •   windplume · 2021-05-11 15:49:39 +08:00 · 1614 次点击
    这是一个创建于 1284 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在手上有份 C++的非托管 DLL 和 C++接口文档,我想用 C#调用非托管库导出的函数,但是我只懂 C#不懂 C++,好多数据类型不知道怎么转,我去看了下微软的官方文档,结果看得我血压都高了。我想问下不懂 C++的话 C#是不是就写不出来了。
    11 条回复    2021-05-11 21:41:24 +08:00
    ysc3839
        1
    ysc3839  
       2021-05-11 15:58:33 +08:00 via Android
    发出来看看吧
    thfurior
        2
    thfurior  
       2021-05-11 16:07:43 +08:00
    到网上搜常用类型的 c++ - c#转换,除了指针和结构体麻烦点,其他还好
    wctml
        3
    wctml  
       2021-05-11 16:22:13 +08:00
    dll 一般都是导出纯 C 的接口
    allen9527
        4
    allen9527  
       2021-05-11 16:25:52 +08:00
    我记得有个 pinvoke 的生成工具,把.h 文件黏进去就可以生成 C#代码了。当然一些参数什么的自己还是要调整下,比如碰到传送字符串的时候。不熟悉的话可能还有些弯路,多问问 google 之类的。。。
    Vinty
        5
    Vinty  
       2021-05-11 16:33:31 +08:00
    可以试试 swig 编译一个 c#接口
    AdamMaggie
        6
    AdamMaggie  
       2021-05-11 16:36:11 +08:00
    github.com/mono/CppSharp
    可以将非托管 C++,用 C++/CLI 或者 C# 生成一个托管类
    elmagnificogg
        7
    elmagnificogg  
       2021-05-11 19:35:00 +08:00 via Android
    网上资料比较少,微软自己写的转换例子太少了,有些情况都没写。我刚把一个 c++库转到 clr,然后给 c#调,有问题可以问,主要是数据封装类型转换的问题
    Mithril
        8
    Mithril  
       2021-05-11 20:16:00 +08:00
    写个 C++的头文件,然后 SWIG 一把梭。
    ch2
        9
    ch2  
       2021-05-11 20:52:33 +08:00
    你不会 C++肯定搞定不了,不过 C#已经算是调用 C++最简单的了
    killergun
        10
    killergun  
       2021-05-11 21:19:57 +08:00
    微软专门有个自己的 C++/CLI Wrapper,可以直接建该 C++ wrapper 项目 [在这里面调用你的 C++dll] ,你会发现 C#项目能直接引用该项目,跟 C# 本身项目没什么太大区别 。
    wzzzx
        11
    wzzzx  
       2021-05-11 21:41:24 +08:00
    非托管的话,你需要自己自己用托管 C++包一层,这样会好一点。托管 C++除了一点例外,其他的跟 C#一样写就好。非托管 C++因为名称修饰的原因,C#没法直接使用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4922 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:42 · PVG 17:42 · LAX 01:42 · JFK 04:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.