Конвертировать char [] в System :: Object - PullRequest
2 голосов
/ 27 января 2010

В C ++ у меня есть переменная char [256], которая заполняется вызовом внешней DLL, которая заполняет ее данными. Оттуда я хотел бы добавить char [] в качестве элемента ComboBox.

char name[256];
name[0] = "76";
comboBox1->Items->Add(name);

Это создает ошибку сборки, потому что char [] не является типом System :: Object. Любые идеи по преобразованию char [] в то, что я могу добавить в качестве элемента в элемент управления ComboBox? Преобразование в строку было бы просто хорошо, но я не совсем уверен, как это сделать. Плюс, если я попытаюсь создать переменную, такую ​​как:

string strName;

также создает ошибку из-за отсутствия ';' перед идентификатором 'strName'. Я новичок в C ++, и я все еще собираюсь с этим, так что спасибо за любую помощь!

EDIT Полный код по запросу:

#pragma once

пространство имен FMODMultipleSoundcardWindowed {

#include <string>
#include "inc/fmod.h"
#include "inc/fmod_errors.h"

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace std;


FMOD_SYSTEM     *systemA, *systemB;
FMOD_SOUND      *soundA, *soundB;
FMOD_CHANNEL    *channelA = 0, *channelB = 0;
FMOD_DSP        *dspNormalizerA, *dspNormalizerB;
FMOD_DSP        *dspCompressorA, *dspCompressorB;
FMOD_DSP        *dspEqualizerA[10], *dspEqualizerB[10];
FMOD_DSP        *dspVSTVUA, *dspVSTVUB;
FMOD_RESULT     result;
unsigned int    dspVSTVUHandleA, dspVSTVUHandleB;
unsigned int    version;
int             numdrivers, count;


public ref class Form1 : public System::Windows::Forms::Form
{
public:
    Form1(void)
    {
        InitializeComponent();

        result = FMOD_System_Create(&systemA);
        ERRCHECK(result);

        result = FMOD_System_GetVersion(systemA, &version);
        ERRCHECK(result);

        if (version < FMOD_VERSION)
        {
            MessageBox::Show("You are using an old version of FMOD!");
        }

        result = FMOD_System_GetNumDrivers(systemA, &numdrivers);
        ERRCHECK(result);

        for (count = 0; count < numdrivers; count++)
        {
            char name[256];

            result = FMOD_System_GetDriverInfo(systemA, count, name, 256, 0);
            ERRCHECK(result);

            m_objPrimaryAudioDeviceComboBox->Items->Add(name[0]);
        }
    }

    void ERRCHECK(FMOD_RESULT result)
    {
        if (result != FMOD_OK)
        {
            MessageBox::Show("FMOD Error!");
            this->Close();
        }
    }

protected:
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    ~Form1()
    {
        if (components)
        {
            delete components;
        }
    }
private: System::Windows::Forms::ComboBox^  m_objPrimaryAudioDeviceComboBox;
protected: 
private: System::Windows::Forms::ComboBox^  m_objSecondaryAudioDeviceComboBox;

private:
    System::ComponentModel::Container ^components;

Прагма регион Windows Form Designer сгенерированный код

    void InitializeComponent(void)
    {
        this->m_objPrimaryAudioDeviceComboBox = (gcnew System::Windows::Forms::ComboBox());
        this->m_objSecondaryAudioDeviceComboBox = (gcnew System::Windows::Forms::ComboBox());
        this->SuspendLayout();
        // 
        // m_objPrimaryAudioDeviceComboBox
        // 
        this->m_objPrimaryAudioDeviceComboBox->FormattingEnabled = true;
        this->m_objPrimaryAudioDeviceComboBox->Location = System::Drawing::Point(12, 12);
        this->m_objPrimaryAudioDeviceComboBox->Name = L"m_objPrimaryAudioDeviceComboBox";
        this->m_objPrimaryAudioDeviceComboBox->Size = System::Drawing::Size(254, 21);
        this->m_objPrimaryAudioDeviceComboBox->TabIndex = 0;
        // 
        // m_objSecondaryAudioDeviceComboBox
        // 
        this->m_objSecondaryAudioDeviceComboBox->FormattingEnabled = true;
        this->m_objSecondaryAudioDeviceComboBox->Location = System::Drawing::Point(12, 54);
        this->m_objSecondaryAudioDeviceComboBox->Name = L"m_objSecondaryAudioDeviceComboBox";
        this->m_objSecondaryAudioDeviceComboBox->Size = System::Drawing::Size(254, 21);
        this->m_objSecondaryAudioDeviceComboBox->TabIndex = 1;
        // 
        // Form1
        // 
        this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
        this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
        this->ClientSize = System::Drawing::Size(440, 426);
        this->Controls->Add(this->m_objSecondaryAudioDeviceComboBox);
        this->Controls->Add(this->m_objPrimaryAudioDeviceComboBox);
        this->Name = L"Form1";
        this->Text = L"FMOD Multiple Soundcard with VST";
        this->ResumeLayout(false);

    }

Прагма эндрегион

};

}

Ответы [ 3 ]

1 голос
/ 27 января 2010
string strName;

Во-первых, вам нужно #include <string>, чтобы использовать std::string. Во-вторых, вам нужно добавить using namespace std; к вашему устройству, чтобы обозначить std::string как string. В качестве альтернативы используйте взамен std::string strName. Это вопрос вкуса. Использование полной формы исключает загрязнение пространства имен всеми идентификаторами от std.

На главный вопрос:

gcnew String( text.c_str() );

Это должно сделать преобразование. text - это ваш экземпляр std::string, а результатом выражения является строковый объект, который необходимо передать Add.

0 голосов
/ 27 января 2010

ваша вторая проблема звучит так, как будто вы пропустили класс include для строки, поэтому просто добавьте #include <string> в начало вашего файла, вам также может понадобиться добавить using namespace std; или использовать 'std :: string' в зависимости от вашего система

0 голосов
/ 27 января 2010

Попробуйте string strName(name); (при условии, что у вас есть правильные включения и пространства имен ...)

ОБНОВЛЕНИЕ: похоже, вам нужно использовать System :: String , а не строку STL.

...