【问题标题】:calling a C++ function from C# and sending data back to the C#从 C# 调用 C++ 函数并将数据发送回 C#
【发布时间】:2011-02-16 11:14:59
【问题描述】:

我有一个 C# 应用程序,它调用用 C++ 编写的 DLL 中的函数。调用工作正常,代码在 C# 中使用此方法执行:

[DllImport("myDLL.dll")]
public static extern void Function();

static void Main()
{
    Function();
}

现在可以了,我需要执行的 C++ 代码将文本发送回 C#,以便在面板中显示。

文本是“第一阶段......”执行代码......然后是“第二阶段”等,显示正在运行的进程。只是基本的东西。我不知道如何解决这个问题,因为我不是 C++ 人。我的主要技能是 .NET。

干杯

【问题讨论】:

    标签: c# c++ winforms asynchronous


    【解决方案1】:

    尝试在 C++ 中使用回调并在 C# 中对其进行签名

    C++部分

    typedef void (CALLBACK *pfNotifyMessage)(LPTSTR);
    
    extern "C" AFX_API_EXPORT void SetNotifyMessage(pfNotifyMessageType pfNotify);
    extern "C" AFX_API_EXPORT void Function();
    

    在 C++ 函数调用中调用 pfNotifyMessage

    C#部分

    public delegate void NotifyMessage(string message);
    
    [DllImport("myDLL.dll")]
    public static extern void SetNotifyMessage(NotifyMessage notify);
    
    [DllImport("myDLL.dll")]
    public static extern void Function();
    

    在С#中用函数分配委托

    【讨论】:

    • 嗨,C++ 代码在添加到代码时会导致许多错误
    • 只是c++ lib的一个头文件,需要实现回调
    • 你可以看这篇文章来获取写回调的基本信息cc.byexamples.com/2007/10/11/simple-callback-function
    • “EXTERN_C AFX_API_EXPORT”是有效的 C++ 代码吗?我只问这个,好像我把它放在谷歌里一样,一堆垃圾。
    • 此代码不起作用。我已将它添加到我的 C++ 中并且有许多错误:语法错误:'void' 应该以 ';' 开头缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数“pfNotifyMessageType”:未声明的标识符语法错误:在标识符“pfNotify”之前缺少“)”“SetNotifyMessage”:非法使用类型“void”语法错误:“)”缺少类型说明符 - 假定为 int .注意:C++ 不支持 default-int
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多