0

DLL で動作する C# コードを C++ に変換しようとしているので、私の c++ アプリケーションは DLL で動作します。だからここで私はC++/cliアプリケーションを開発しています

私はこのC#コードに取り組んでいます:

private void SendUSBData(byte[] Data)
{
    if (this.USB.SpecifiedDevice != null)
    {
        this.USB.SpecifiedDevice.SendData(Data);
    }
}

SendData()dll で使用できるメソッドです。以下はdllでの定義です

public void SendData(byte[] data);

OK、C++ コードで、C# コードを次のように変換しようとしました

void MissileLauncher::sendUSBData(unsigned char *data)
{
    if(usb.SpecifiedDevice!=nullptr)
    {
        //System::Byte
        usb.SpecifiedDevice->SendData(&data);
    }
}

このコードを実行すると、次のエラーが表示されます

1>------ Build started: Project: CallToCSharp, Configuration: Debug Win32 ------
1>  MissileLauncher.cpp
1>MissileLauncher.cpp(200): error C2664: 'UsbLibrary::SpecifiedDevice::SendData' : cannot convert parameter 1 from 'unsigned char **' to 'cli::array<Type,dimension> ^'
1>          with
1>          [
1>              Type=unsigned char,
1>              dimension=1
1>          ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

私も次のことを試しました

void MissileLauncher::sendUSBData(array<System::Byte>^data)
{
    if(usb.SpecifiedDevice!=nullptr)
    {
        //System::Byte
        usb.SpecifiedDevice->SendData(&data);
    }
}

それは私に次のエラーを与えました

1>------ Build started: Project: CallToCSharp, Configuration: Debug Win32 ------
1>  MissileLauncher.cpp
1>MissileLauncher.cpp(125): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1>          with
1>          [
1>              Type=unsigned char
1>          ]
1>MissileLauncher.cpp(159): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1>          with
1>          [
1>              Type=unsigned char
1>          ]
1>MissileLauncher.cpp(164): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1>          with
1>          [
1>              Type=unsigned char
1>          ]
1>MissileLauncher.cpp(166): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1>          with
1>          [
1>              Type=unsigned char
1>          ]
1>MissileLauncher.cpp(186): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1>          with
1>          [
1>              Type=unsigned char
1>          ]
1>MissileLauncher.cpp(188): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1>          with
1>          [
1>              Type=unsigned char
1>          ]
1>MissileLauncher.cpp(200): error C2664: 'UsbLibrary::SpecifiedDevice::SendData' : cannot convert parameter 1 from 'cli::array<Type> ^*' to 'cli::array<Type> ^'
1>          with
1>          [
1>              Type=unsigned char
1>          ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

どうすればこれを取り除くことができますか?

アップデート

回答で提案されているように、次のコードを試しました

void MissileLauncher::sendUSBData(unsigned char *data)
{
    if(usb.SpecifiedDevice!=nullptr)
    {
        int N = 10;
            cli::array<char>^ newData = gcnew cli::array<char>(N);

        for (int i = 0; i < N; ++i)
            newData[i] = data[i];

        //System::Byte
        usb.SpecifiedDevice->SendData(newData);
    }
}

今、それは私に以下のエラーを与えています

1>------ Build started: Project: CallToCSharp, Configuration: Debug Win32 ------
1>  MissileLauncher.cpp
1>MissileLauncher.cpp(206): error C2664: 'UsbLibrary::SpecifiedDevice::SendData' : cannot convert parameter 1 from 'cli::array<Type> ^' to 'cli::array<Type,dimension> ^'
1>          with
1>          [
1>              Type=char
1>          ]
1>          and
1>          [
1>              Type=unsigned char,
1>              dimension=1
1>          ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

正直なところ、このコードが提案どおりに正しくコーディングされているかどうかはわかりません。

4

3 に答える 3

0

2 番目のバージョンはほぼ正しかったです。これが質問からです:

void MissileLauncher::sendUSBData(array<System::Byte>^data)
{
    if(usb.SpecifiedDevice!=nullptr)
    {
        //System::Byte
        usb.SpecifiedDevice->SendData(&data);
    }
}

そして、ここに修正があります:

        usb.SpecifiedDevice->SendData(/* & <- take that out */ data);
于 2013-05-11T19:49:40.010 に答える