【问题标题】:How to Access/marshall char *variable from dll import in C#如何从 C# 中的 dll 导入中访问/编组 char *variable
【发布时间】:2010-02-25 17:30:24
【问题描述】:


我需要从 win32 dll 访问功能,因为我在 C# 代码中使用 [dllimport]。


我需要使用 [dllimport] 为以下 c++ 方法创建什么确切的方法签名

void GetGeneratedKey(char *code, int len, char *key)

请帮忙。

谢谢
nRk

【问题讨论】:

    标签: c# .net c++ interop com-interop


    【解决方案1】:

    这在很大程度上取决于本机 C 函数中变量 keycode 发生的情况。根据签名,我猜code 正在被读取,key 正在被写入。如果是这种情况,请尝试以下签名

    [DllImport("SomeDll")]
    public static extern void GetGeneratedKey(
      [In] string code,
      [In] int length,
      StringBuilder key);
    

    【讨论】:

      【解决方案2】:

      只需使用string。应该可以工作。

      【讨论】:

        【解决方案3】:

        大家的快速回复和支持
        我使用了如下方法签名

        VC++ 方法签名
        void GetGeneratedKey(char *code, int len, char *key)

        C# 签名
        [DllImport("SomeDll")]
        public static extern void GetGeneratedKey(byte[] code, int len, bute key);


        nRk

        【讨论】:

          【解决方案4】:

          这是我对非托管案例的解决方案。

          C++

           void GetGeneratedKey(
           const char *code,
           int length,
           char *key);
          

          C#

          [DllImport("Some.Dll")]
          public static extern void GetGeneratedKey(
          [MarshalAs(UnmanagedType.LPStr)]string code,
          int length,
          [MarshalAs(UnmanagedType.LPStr)]StringBuilder key);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-04-07
            • 2017-09-19
            • 2019-07-19
            • 2014-04-07
            • 2019-07-30
            • 2021-10-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多