c# - 如何使用 P/INVOKE 将 C++ char* 编码为 C# 字符串

标签 c# c++ pinvoke marshalling unmanaged

我是 C++ 新手。我正在使用 PINVOKE 从 C# 调用 C++ 函数,并希望将字符串作为输出参数返回。但是我只得到一个空字符串。 int out 参数工作正常。

导入:

[DllImport ( @"UnamanagedAssembly.dll", CharSet = CharSet.Ansi)] 
public static extern int Activate(ref int numActivated,  StringBuilder eventsActivated);

extern "C" __declspec(dllexport) int Activate(int *p_NumActivated, char *p_EventsActivated) {return Activation::GetInstance()->Activate(p_NumActivated, p_EventsActivated);}

从 C# 调用我的 C++ 函数:

int numActivated = 0;
StringBuilder eventsActivated = new StringBuilder();
int status = Activate(ref numActivated, eventsActivated);  

C++函数:

int Activation::Activate(int *p_NumActivated, char *&p_EventsActivated)
{
    char *pTemp = "Hello";
    p_EventsActivated = pTemp;

    *p_NumActivated = 1;

    return 0;
}

最佳答案

StringBuilder eventsActivated = new StringBuilder(5);

代替

StringBuilder eventsActivated = new StringBuilder();

关于c# - 如何使用 P/INVOKE 将 C++ char* 编码为 C# 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3278314/

相关文章:

c# - 将断言输出从 dll 重定向到文件

c# - SlimDX Device.Reset 崩溃并出现 "D3DERR_INVALIDCALL: Invalid call (-2005530516)"错误

c# - 应用程序运行时接收通知

c++ - 创建右值并通过转发将其传递给函数

c++ - 如何在构造函数中正确使用 call_once()?

c++ - 检查该宏参数是否是允许的参数之一?

pinvoke - 与 ASP.net vNext 中的非托管代码进行互操作

c# - 从网络应用程序调用所需的最低用户权限?

c# - 相对于应用程序的光标位置

c# - 附有堆转储的 Fluent Nhibernate 内存泄漏