【问题标题】:C++/CLI: Cannot convert parameterC++/CLI:无法转换参数
【发布时间】:2013-05-11 17:18:22
【问题描述】:

我有一个小问题,我会先解释一下。我正在尝试使用 C++/CLI 将与 C# dll 一起使用的 C# 代码转换为 C++,因此我的 C++ 应用程序可以与 C# dll 一起使用。以下是部分C#代码

private void USB_OnSpecifiedDeviceRemoved(object sender, EventArgs e)
        {
            this.DevicePresent = false;
        }

this.USB.OnSpecifiedDeviceRemoved += new EventHandler(this.USB_OnSpecifiedDeviceRemoved);

以下是我的 C++ 转换

   usb.OnSpecifiedDeviceRemoved +=  System::EventHandler(this->USB_OnSpecifiedDeviceRemoved(nullptr,nullptr));


    void MissileLauncher::USB_OnSpecifiedDeviceRemoved(System::Object sender, System::EventArgs e)
    {

    }

当我运行我的 C++ 代码时,我收到以下错误

   1>------ Build started: Project: CallToCSharp, Configuration: Debug Win32 ------
1>  MissileLauncher.cpp
1>MissileLauncher.cpp(109): error C2664: 'MissileLauncher::USB_OnSpecifiedDeviceRemoved' : cannot convert parameter 1 from 'nullptr' to 'System::Object'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>MissileLauncher.cpp(109): fatal error C1903: unable to recover from previous error(s); stopping compilation
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

为什么会这样?有什么想法吗?

【问题讨论】:

    标签: c# .net visual-studio-2010 c++-cli


    【解决方案1】:

    我发现您的转换存在两个问题。首先,您错误地将事件处理程序添加到事件中。它应该类似于以下内容:

    usb.OnSpecifiedDeviceRemoved +=
        gcnew System::EventHandler(this,
            &MissileLauncher::USB_OnSpecifiedDeviceRemoved);
    

    其次,事件处理程序的签名不正确。您需要对参数使用跟踪引用,使用^ 表示:

    void MissileLauncher::USB_OnSpecifiedDeviceRemoved(System::Object ^sender,
                                                       System::EventArgs ^e)
    

    希望对您有所帮助。

    【讨论】:

    • 这是多么大的帮助啊!太棒了!
    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2012-05-10
    • 2020-03-19
    • 2014-01-01
    • 2011-04-13
    相关资源
    最近更新 更多