0

小さな問題があり、最初に説明します。C# dll で動作する C# コードを C++/CLI を使用して 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 ==========

なぜこれが起こっているのですか?何か案は?

4

1 に答える 1

1

あなたの変換には 2 つの問題があります。まず、イベント ハンドラーをイベントに誤って追加しています。次のようになります。

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

次に、イベント ハンドラーの署名が正しくありません。引数には追跡参照を使用する必要があります。これは、次を使用して示されます^

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

それが役立つことを願っています。

于 2013-05-11T17:27:46.360 に答える