【发布时间】:2016-07-21 10:08:09
【问题描述】:
我正在从 C# 调用 C++ 外部库。返回有效,但是printf() 不在控制台窗口中打印数据。为什么会这样?我做错了吗?
即使我调用 DisplayHelloFromDLL 而不将其返回值分配给变量 x,打印的文本也不会显示在屏幕上。
C++:
#include <stdio.h>
extern "C"
{
__declspec(dllexport) char * DisplayHelloFromDLL()
{
printf ("Hello from DLL !\n");
return "Something";
}
}
C#:
using System;
using System.Runtime.InteropServices;
class HelloWorld
{
[DllImport("Hello.dll", EntryPoint = "DisplayHelloFromDLL")]
public static extern string DisplayHelloFromDLL();
static void Main()
{
Console.WriteLine("This is C# program");
string x = DisplayHelloFromDLL();
Console.WriteLine(x);
Console.ReadKey();
}
}
【问题讨论】:
-
没有显示 C 代码。你的意思是 C++。
-
是的,抱歉,我将编辑问题。但是,我不明白为什么有人反对它。
-
您在 C# 端以这种方式处理
char*返回类型。您的代码尝试释放调用CoTaskMemFree的指针。将返回类型声明为IntPtr,得到一个带有Marshal.PtrToStringAnsi的字符串。 -
@DavidHeffernan 实际上返回数据效果很好。但是 C 中的 'printf()' 不会在控制台中打印“Hello from DLL”。
-
@DavidHeffernan 它怎么不能工作?它正在屏幕上打印“某物”。我们在谈论同样的事情吗?