【问题标题】:How to pass a Reference-to-Pointer between between C# and an un-managed C++ Library?如何在 C# 和非托管 C++ 库之间传递引用指针?
【发布时间】:2016-03-17 10:04:23
【问题描述】:

在我的 C/C++ 库中,我有一个具有这样一个原型的函数:

long myFunction( const wchar_t*& pszOutput)

Dll 为 pszOutput 分配内存并释放它。

如何从 C# 调用这个函数?

我已经尝试了以下行的很多变体(没有 out,使用 MarshalAs,...),但退出 myFunction 时总是崩溃:

[DllImport("mydll.dll", EntryPoint = "myFunction", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
private static extern long myFunction(ref string szOutput);

有谁知道,该怎么做?

【问题讨论】:

    标签: c# c++ pointers reference


    【解决方案1】:

    如果您在 Windows 上,C++ long 不是 C# long,通常是 C# int。检查 C++ 中的sizeof(long)。如果是 4 则为int

    尝试传递out IntPtr szOutput,然后使用Marshal.PtrToStringUni() 和返回的IntPtr

    请参阅 PInvoke and char** 以了解类似问题。

    【讨论】:

    • 关于 C++/C# 中的 long,我刚刚键入了一个“虚拟”的代码,而不是真正的代码;-)。非常感谢答案。我已经看过您提到的示例,但只是希望可以存在“更简单”的解决方案,并且如果可能的话,没有返回字符串的任何副本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2011-07-12
    • 2015-02-11
    • 2019-11-13
    相关资源
    最近更新 更多